ShellExecute(handle, 'CLOSE', PChar('C:\WINDOWS\system32\cmd.exe'), '', '', SW_SHOWNORMAL);
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
Curtidas 0
Respostas
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!!
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
02/12/2009
Olá,
Rodrigo.
O prompt.
Obrigado pela atenção.
Att..
Ricardo
GOSTEI 0
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,
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
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
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!!
Cara e brincadeira né, nunca que ia passar isso pela minha cabeça rsrsrs
MAs vlw, até a próxima !!
Abs!!
GOSTEI 0