GARANTIR DESCONTO

Fórum PostMessage fechando todas as aplicações #357435

22/04/2008

0

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

Responder

Posts

22/04/2008

Rodc

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


Responder

Gostei + 0

22/04/2008

Et.vinny

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


Responder

Gostei + 0

22/04/2008

Ricvictor

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


Responder

Gostei + 0

22/04/2008

Psyjacko

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:


Responder

Gostei + 0

22/04/2008

Rodc

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.


Responder

Gostei + 0

22/04/2008

Psyjacko

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


Responder

Gostei + 0

22/04/2008

Rodc

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


Responder

Gostei + 0

24/04/2008

Ricvictor

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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar