Jump to content
Fórum Script Brasil
  • 0

Comunicação Entre Processos (programas)


Guest Yoda
 Share

Question

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...

Edited by Micheus
Alterado o título de "Api Do Windows" para o atual.
Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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...

Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.8k
    • Total Posts
      646.6k
×
×
  • Create New...