Ir ao conteúdo
  • Cadastre-se

Brincando com janelas dos + sendmessage


maclogic

Posts recomendados

Galera, to com o seguinte problema:

Estou Rodando um Batch file (.BAT) com o ShellExecute (ShellAPI), tudo beleza, ele roda e tal, mas como eu sei o handle que ele foi gerado para poder dar o SendMessage(WM_CLOSE)?

Ou se alguem tiver alguma outra ideia sera bem-vindo ! :)

Estou usando Delphi 6 Sp2.

Valeu galera!

[]s

Mac Logic

Link para o comentário
Compartilhar em outros sites

E aí ...

Olha, pra você pegar o Handle, facilita bastante se você souber em qual aplicação o .BAT roda.

Acho que seria mais fácil (sou apenas um curioso em Delphi) usar o WinExec ao invés do ShellExecute. Assim :

WinExec('C:\WINDOWS\COMMAND.COM C:\ARQUIVO.BAT', SW_SHOW);

E depois você usa o FindWindow pra achar o Handle do Command.com e fechá-lo com o SendMessage.

Se fosse um arquivo que pudesse ser aberto por muitos aplicativos (como .BMP, por exemplo, que é aberto por uma porrada de editores gráficos) seria muito difícil de descobrir o Handle só com o nome do arquivo, mas como eu sei que só o DOS roda os .BAT, então só o Command.com é capaz de executá-los, independente de ser pelo WinExec, pelo ShellExecute ou com um clique duplo no próprio arquivo. É uma solução fácil, e não sei se isso serve pra você ... ,mas resolve, pra mim isso é mais importante.

PS. Se a questão é fechar o batch APENAS APÓS SEU TÉRMINO, tem uma solução mais fácil ainda : use o parâmetro /C na linha de comando assim ...

WinExec('C:\Windows\Command.com /C C:\ARQUIVO.BAT', SW_SHOW);[\B]

Ele executa o Batch e quando ele cumpre sua tarefa, fecha automaticamente. Nem precisa do SendMessage.

'Té mais ....

Link para o comentário
Compartilhar em outros sites

Postado Originalmente por Krad Nale@23 Fev. 2002, 23:07

E aí ...

Olha, pra você pegar o Handle, facilita bastante se você souber em qual aplicação o .BAT roda.

Acho que seria mais fácil (sou apenas um curioso em Delphi) usar o WinExec ao invés do ShellExecute. Assim :

WinExec('C:\WINDOWS\COMMAND.COM C:\ARQUIVO.BAT', SW_SHOW);

E depois você usa o FindWindow pra achar o Handle do Command.com e fechá-lo com o SendMessage.

Se fosse um arquivo que pudesse ser aberto por muitos aplicativos (como .BMP, por exemplo, que é aberto por uma porrada de editores gráficos) seria muito difícil de descobrir o Handle só com o nome do arquivo, mas como eu sei que só o DOS roda os .BAT, então só o Command.com é capaz de executá-los, independente de ser pelo WinExec, pelo ShellExecute ou com um clique duplo no próprio arquivo. É uma solução fácil, e não sei se isso serve pra você ... ,mas resolve, pra mim isso é mais importante.

PS. Se a questão é fechar o batch APENAS APÓS SEU TÉRMINO, tem uma solução mais fácil ainda : use o parâmetro /C na linha de comando assim ...

WinExec('C:\Windows\Command.com /C C:\ARQUIVO.BAT', SW_SHOW);[\B]

Ele executa o Batch e quando ele cumpre sua tarefa, fecha automaticamente. Nem precisa do SendMessage.

'Té mais ....

aee Krad, a sua ultima linha de comando foi o que respondeu minha pergunta de maneira completa! era exatamente isso que estava procurando!! valeuzzzzzz!!

Grande []s,

Mac Logic

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...