PostMessage fechando todas as aplicações
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
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
Curtidas 0
Respostas
Rodc
22/04/2008
Já tentou usar WM_CLOSE ao invés de WM_QUIT?
GOSTEI 0
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
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
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
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
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 :
e as Window Message WM_CLOSE e WM_QUIT nao pediram confirmação , pelo menos aqui no teste que fiz , flw :wink:
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
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
22/04/2008
ah sim , o SendMessage é síncrono já o PostMessage nao
GOSTEI 0
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
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
Mas quero agradecer por demais a força dos amigos.
Grande abraço.
Ricardo Lucena
Natal/RN
GOSTEI 0