Ir para conteúdo
Fórum Script Brasil
  • 0

Comunicação Entre Processos (programas)


Guest Yoda

Pergunta

Caros,

tem alguém por aqui que entende de APIs do Windows. Meu problema é o seguinte, tenho uma aplicacao que chama outra aplicacao de dentro dela (aplicacao filha) e quando tem uma janela modal que bloquea a aplicacao filha, gostaria que também bloqueasse a aplicacao pai. alguém sabe como posso fazer isso.

Valeu galera...

Editado por Micheus
Alterado o título de "Api Do Windows" para o atual.
Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0
Guest --Jonas --
Caros,

tem alguém por aqui que entende de APIs do Windows. Meu problema é o seguinte, tenho uma aplicacao que chama outra aplicacao de dentro dela (aplicacao filha) e quando tem uma janela modal que bloquea a aplicacao filha, gostaria que também bloqueasse a aplicacao pai. alguém sabe como posso fazer isso.

Valeu galera...

Para executar um programa e esperar até esse programa finalizar, bloqueando a janela pai, use a rotina abaixo:

function Executa (Arquivo : String; Estado : Integer) : Integer; 
var 
Programa : array [0..512] of char; 
CurDir : array [0..255] of char; 
WorkDir : String; 
StartupInfo : TStartupInfo; 
ProcessInfo : TProcessInformation; 
begin 
StrPCopy (Programa, Arquivo); 
GetDir (0, WorkDir); 
StrPCopy (CurDir, WorkDir); 
FillChar (StartupInfo, Sizeof (StartupInfo), #0); 
StartupInfo.cb := sizeof (StartupInfo); 
StartupInfo.dwFlags := STARTF_USESHOWWINDOW; 
StartupInfo.wShowWindow := Estado; 
if not CreateProcess (nil, Programa, nil, nil, false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then 
Result := -1 
else 
begin 
WaitForSingleObject (ProcessInfo.hProcess, Infinite); 
GetExitCodeProcess (ProcessInfo.hProcess, Result); 
end; 
end;

Estado é o tipo de janela que aparecerá, que pode ser:

SW_SHOWNORMAL

Janela em modo normal

SW_MAXIMIZE

Janela maximizada

SW_MINIMIZE

Janela minimizada

SW_HIDE

Janela Escondida

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Jonas --
Mas só quero bloquear a janela pai quando uma mensagem modal for lançada, não quero bloqueá-la para sempre...

Neste caso, se voce deve trocar form1.showmodal por form1.show . o showmodal trava a sua janela e não deixa executar a que estiver por traz, no entanto se você usar apenas show a janela por traz fica disponivel ... ok ?

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Jonas --
Na verdade o que eu quero é que um processo se comunique com outro, alguém poderia me dizer como fazer um processo enviar mensagem para outro...

Fechar um aplicativo Delphi a partir de outro aplicativo Delphi

procedure TForm1.Button1Click(Sender: TObject);
var
Win : THandle; 
begin

Win := FindWindow(nil,’Form1');

if Win <> 0 then

PostMessage(Win,WM_CLOSE,0,0)
else
ShowMessage(‘Programa não encontrado’);

end;

Obs. No exemplo acima foi utilizado o POSTMESSAGE para enviar uma mensagem WM_CLOSE para a janela

principal.

Link para o comentário
Compartilhar em outros sites

  • 0
Na verdade o que eu quero é que um processo se comunique com outro, alguém poderia me dizer como fazer um processo enviar mensagem para outro...
Yoda, como o colega Jonas mencionou, um dos métodos é através de mensagens (via SendMessage, PostMessage). Outra possibilidade seria através de DDE (Dynamic Data Exchange).

Em qualquer um dos casos, se forem troca de informações específicas, ambas aplicações deverão estar preparadas para "conversar" uma com a outra.

p.s. Yoda, eu alterei o título do seu tópico porque ele não deixa claro a sua real questão.

Link para o comentário
Compartilhar em outros sites

  • 0
Na verdade o que eu quero é que um processo se comunique com outro, alguém poderia me dizer como fazer um processo enviar mensagem para outro...
Yoda, como o colega Jonas mencionou, um dos métodos é através de mensagens (via SendMessage, PostMessage).

Ok, minha idéia é usar SendMessage e PostMessage mesmo, mas como posso fazer isso? Como posso por exemplo saber o handle da aplicação destino?

Link para o comentário
Compartilhar em outros sites

  • 0
Ok, minha idéia é usar SendMessage e PostMessage mesmo, mas como posso fazer isso? Como posso por exemplo saber o handle da aplicação destino?
Voce pode seguir o último exemplo do Jonas: FindWindow

Dê uma olhada nestes posts:

- Função Findwindow (Significado de uma variável)

- Preencher Campo De Outro Programa, Mais/menos igual o teclado virtual do XP

- Executável Se Comunicando Com Outro, É possível?

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...