PostMessage fechando todas as aplicações

Delphi

22/04/2008

Olá pessoal.

Tenho numa aplicação (chamemos aqui de principal) a necessidade de executar uma outra (chamemos de auxiliar). Até aí, tudo bem, mando executar (a auxiliar) através do shellexecute. O problema que estou encontrando é que quando peço para fechar a ´auxiliar´ através do postmessage, o comando está fechando também a ´principal´. :cry:

Segue abaixo as linhas de comando que estou aplicando:

//executar a auxiliar --> O executável é Inner.exe
ShellExecute(0,nil,´Inner.exe´,´´,nil,sw_shownormal);

//Para fechar a auxiliar --> Na janela do executável, o nome é Gerenciador de Inners
PostMessage(FindWindow(nil, PChar(´Gerenciador de Inners´)), WM_QUIT,0,0);

Poderiam os amigos me ajudar? Como soluciono essa bronca?

Obrigado e abraço a todos.

Ricardo Lucena
Natal/RN


Ricvictor

Ricvictor

Curtidas 0

Respostas

Rodc

Rodc

22/04/2008

Já tentou usar WM_CLOSE ao invés de WM_QUIT?


GOSTEI 0
Et.vinny

Et.vinny

22/04/2008

Por acasso, você não tem o mesmo comando que recebe a msg no sistema principal?

Sobre o WM_CLOSE ou WM_QUIT, se no programa auxiliar tiver alguma msg no OnClose, ele nãi fecha.

[]s

ET


GOSTEI 0
Ricvictor

Ricvictor

22/04/2008

Olá et.vinny ...

Da aplicação principal, peço para fechar a aplicação auxiliar através do PostMessage (somente nesse momento utilizo esse comando). O programa auxiliar (Inner.exe) é um executável tipo a calculadora do windows onde não posso controlar ações num evento ´onclose´...

Ainda assim, no comando abaixo, eu não estou especificando qual a janela deverá ser fechada ?! Não vejo o porquê do comando estar fechando tudo :cry:

//Para fechar a auxiliar --> Na janela do executável, o nome é Gerenciador de Inners
PostMessage(FindWindow(nil, PChar(´Gerenciador de Inners´)), WM_QUIT,0,0);

Quanto a dica do rodc, o WM_CLOSE solicita uma confirmação do usuário para poder fechar, enquanto que o WM_QUIT fecha sem pedir confirmação.

Espero que tenham compreendido melhor e assim possam me ajudar.

Valeusss
[]s

Ricardo Lucena
Natal/RN


GOSTEI 0
Psyjacko

Psyjacko

22/04/2008

eu fiz um teste aki com o PostMessage e SendMessage ambos fecharam somente a janela que passei no código veja o exemplo :

procedure TForm1.Button1Click(Sender: TObject); begin WinExec(´Notepad.exe´,SW_NORMAL); end; procedure TForm1.Button2Click(Sender: TObject); begin PostMessage(FindWindow(nil,´home - Bloco de notas´),WM_CLOSE,0,0); end;


e as Window Message WM_CLOSE e WM_QUIT nao pediram confirmação , pelo menos aqui no teste que fiz , flw :wink:


GOSTEI 0
Rodc

Rodc

22/04/2008

eu fiz um teste aki com o PostMessage e SendMessage ambos fecharam somente a janela que passei no código veja o exemplo:

Abra o notepad, altere o texto do notepad e teste as duas opções e fechar.


GOSTEI 0
Psyjacko

Psyjacko

22/04/2008

ah sim , o SendMessage é síncrono já o PostMessage nao


GOSTEI 0
Rodc

Rodc

22/04/2008

Não testei, mas creio que se o documento foi alterado, WM_CLOSE pergunta por salvar e WM_QUIT não pergunta, está correto?


GOSTEI 0
Ricvictor

Ricvictor

22/04/2008

Pessoal, passei a controlar a execução do programa externo num Timer a parte e substituí por WM_CLOSE no PostMessage. Bom, se é o adequado ou não, num sei, mas funcionou da forma como desejo.

Mas quero agradecer por demais a força dos amigos.

Grande abraço.

Ricardo Lucena
Natal/RN


GOSTEI 0
POSTAR