ShellExecute(handle, 'CLOSE', PChar('C:\WINDOWS\system32\cmd.exe'), '', '', SW_SHOWNORMAL);

02/12/2009

Olá,   Abri uma janela pelo cmd e preciso fechala como faço?   Dei uma pesquisada na net mas sem sucesso.      ShellExecute(handle, 'CLOSE', PChar('C:\WINDOWS\system32\cmd.exe'), '', '', SW_SHOWNORMAL);     Att..   Ricardo
Frigorifico Sa

Frigorifico Sa

Curtidas 0

Respostas

Rodrigo Mourão

Rodrigo Mourão

02/12/2009

Olá Amigo,


Qual é a aplicação que vc quer fechar ??? O prompt ????

Pois para fechar uma aplicação no windows vc tem que mandar um mensagem via SO para a aplicação mas para isso precisa descobrir o handle da janela através da função findwindow, ou seja, usar o findwindow para pegar o hanlde da janela e utilize o sendmessage para enviar um WM_CLOSE para a janela.

Confirme para mim qual janela quer fechar que monto um exemplo.

Abs!!

GOSTEI 0
Frigorifico Sa

Frigorifico Sa

02/12/2009

Olá,   Rodrigo.     O prompt.     Obrigado pela atenção.   Att.. Ricardo
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

02/12/2009

Olá Ricardo,

Bem para fechar uma janela via mensagem do SO seira assim:

PostMessage(FindWindow(nil, 'MSN Messenger'), WM_CLOSE, 0, 0);


O Post Message é o comando para enviar a mensagem. A Mensagem enviada e a WM_CLose que irá fechar a janela. 0 e 0 são parâmetros default. Agora vem a pior parte e vc vai saber pq.

Temos que mandar a mansagem para uma janela, tudo no windows e um janela e possui um handle. A funcao FindWindow retorna o hanlde de uma janela mediante o nome da classe ou o nome ja janela, por exemplo.

Imagine que sua aplicação tenha um form TFrmCLiente de nome FrmCliente. Para fechar este form via SO fariamos:

PostMessage(FindWindow('TFrmCliente', nil), WM_CLOSE, 0, 0);

ou

PostMessage(FindWindow(nil, 'FrmCliente'), WM_CLOSE, 0, 0);


O grande desafio agora e descobrir o nome da janela do CMD ou a classe. Eu tentei com CMD, cmd.exe, prompt, ms-dos, dos e nada. Vou continuar tentando aqui inclusive procurar um programa que descubra o nome de uma janela. O delphi 7 vinha com um programa destes mas nao tenho mais o Dlephi 7.

Decidi postar pois a explicação poderá te ajudar e talvez vc descubrar o nome da janela primeiro do que eu. De qualquer forma continuarei procurando.

Att,


GOSTEI 0
Frigorifico Sa

Frigorifico Sa

02/12/2009

Rodrigo,   Vc não vai acreditar, resolvi testar o "caption da janela" e deu certo. Rss.     PostMessage(FindWindow(nil, 'C:\WINDOWS\system32\cmd.exe'), WM_CLOSE, 0, 0);     Muito obrigado pela dica.     Pode encerrar.   Att.. Ricardo      
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

02/12/2009

kkkkkkkkkkkkkk

Cara e brincadeira né, nunca que ia passar isso pela minha cabeça rsrsrs

MAs vlw, até a próxima !!

Abs!!
GOSTEI 0
POSTAR