Fórum Detectar se um determinado programa está sendo executado #361669
26/07/2008
0
Se com o ShellExecute abro um outro executável, seja em que linguagem for, como faço para detectar isso na minha aplicação Delphi?
Por exemplo:
Abro o programa [b:eed33832da]clientes.exe[/b:eed33832da] e preciso saber que esse programa está sendo executado.
Esse programa é de terceiros, portanto não tenho conhecimento da estrutura dele, só sei o nome do executável, que aliás, pode ser mudado.
Toda ajuda é bem vinda.
Cps.art
Curtir tópico
+ 0Posts
26/07/2008
Psyjacko
FindWindow()
e passe como parâmetro o caption da janela do programa que deseja saber se está sendo executado
Gostei + 0
26/07/2008
Cps.art
A idéia é tentar saber se um executável está ativo, e se tendo somente o nome dele, isso seria possível.
Agradeço.
Gostei + 0
28/07/2008
Wdrocha
Procedure ClassName;
Var ClassComponent : PChar;
Handle : THandle;
Begin
ClassComponent := AllocMem (50);
Handle := FindWindow(Nil, ´caption da janela´);
GetClassName(Handle, ClassComponent, 50);//Pega a Classe do seu executável;
If (For a classe do seu exe...faz o tratamento adequado) Then
End;
//***********************************************************
Na variável ClassComponent vai ficar a classe do seu exe....essa não vai mudar....rsrrsrs...
Testa e vê se é o q vc quer....senão....posta aew.....
espero ter ajudado....
_______________
Williame Rocha
Gostei + 0
30/07/2008
.lg.
Por Exemplo...
Tenhu lá no meus documentos o arquivo:
´WinClassG.exe´
Então se eu usar essa forma de verificação eu consigo verificar se o >>>´WinClassG.exe´<<< está sendo executado!?
OBS.: independente de ser um programa meu, ou um programa que abro pelo delphi, enfim... finja que um primo meu baixou da internet essa coisa... daí... quero verificar sempre que ele abrir esse programa.
OBS².: Não sei o CAPTION dele. So sei o nome que está no executável. :roll:
Gostei + 0
30/07/2008
Wdrocha
vai funcionar se vc souber a classe do exe q vc quer....
Se não souber...vc tem q usar o findWindow antes...
aew....
vc recupera qualquer janela e através do GetClassName vc recupera qualquer classe...
Obs : Vc não pode pegar a classe pelo nome do Exe mas sim pelo caption...
Vlw....
Qualquer coisa...posta aew....
vlw
Gostei + 0
30/07/2008
.lg.
Teria um exemplo ?
Porque até agora não entendi.
O que entendi foi que, eu tenho que saber de qualquer forma qual a caption do programa.
uma pegunta simples de sim ou não:
Situação: Clico 2x no ´programaTal.exe´...
Pergunta: É possivel ver se o programa com o [b:3ce67a4118]nome do aplicativo exatamente[/b:3ce67a4118] como ´programaTal.exe´ está sendo executado???
Gostei + 0
30/07/2008
Wdrocha
Vamos supor q o seu programa tah em execução....e assim q ele começou a ser executado o caption dele tah assim...
´Programa do .lg´
awe vc quer pegar a classe desse programa...
Aew vc usa aquela função q te passei....ela só vai t retornar a classe dele se ele estiver sendo executado....
entendeu??
senão posta aew...q eu vou postar um exemplo pra ti...
tow saindo agora do trabalho...qdo chegar em ksa daqui há mais ou menos uma hora...eu posto o exemplo pra vc...
flw...
Gostei + 0
30/07/2008
.lg.
Não é o caption que quero...
É o nome do aplicativo, do executavel. E não o caption.
A parte que ele vai pegar o título do programa tudo bem eu entendi... porem eu quero pegar é o nome do executável.
Veja bem... se você der Alt+Ctrl+Del e abrir o ´Gerenciador de tarefas´ e for em processos... você vê o nome do executável que está sendo executado. De cada um. É isto que quero. Pegar o nome do executável.
Entende agora? :)
Gostei + 0
30/07/2008
Wdrocha
tem uma função da API q lista todas as janelas em execução..
EnumWindow, se não me engano...
ele tbm mostra apenas as classes q estão sendo executadas no sistema.....
serve pra vc??
Gostei + 0
30/07/2008
.lg.
Acho que sim... Pelo que você fala parece servir sim. Vou dar uma estudada encima dela para ver se me serve.
Ela já vem no Delphi ou tenho que instalar!? (Uso o Delphi 7)
Aaa sim, e Obrigado pela informação. :wink:
Gostei + 0
30/07/2008
Wdrocha
Iniciar....programas....
delphi 7....Ms Sdk....
Win32s Reference procura por EnumWindows
espero ter ajudado vlw
Gostei + 0
30/07/2008
Cps.art
Vou fazer um teste aqui depois coloco o resultado aqui no forum.
Valeu pessoal.
Abraços.
Gostei + 0
30/07/2008
Wdrocha
Eu fiz aq...e ele mostra o nome do seu form....
por exemplo...o nome q eu dei foi...FrmTeste
e ele mostra TfrmTeste
se vc quiser...
eu posto aq...
vlw
Gostei + 0
30/07/2008
Wdrocha
coloca no teu form, pra teste...
Um Button e um ListBox....muda o nome do form para FrmTeste
E põe esse código aq...
//*************************************************************
//Função de CallBack
Function EnumWindowProc (Handle : HWND) : BOOL;StdCall;
Bar Buf : Array [0..255] Of Char;
Begin
GetClassName(Handle, Buf, SizeOf(Buf) - 1);//Pega o nome da classe e coloca na variável Buf
FrmTeste.ListBox1.Items.Add(Buf);//Mostra no ListBox
Result:= True;// Para q a função continue executando tem q retornar True
end;
Procedure TFrmTeste.Button1Click(Sender: TObject);
Begin
EnumWindows(@EnumWindowProc, 0);
End;
End.
//*************************************************************
Procura no ListBox por TFrmTeste....
e o seu exe....
com o nome q vc deu ao form....esse não muda...
qualquer coisa..posta q eu tento fazer melhor...
vlw...
Tow no aguardo...
Gostei + 0
30/07/2008
Cps.art
Com esse programinha aberto e com a orelha Class selecionada, abre-se o executável que se quer descobrir a classe e colocando o ponteiro do mouse na borda superior da janela, o WinDowse dá o nome e outras propriedades desse executável.
Por exemplo: O WinRAR é [b:846deb17c0]WinRarWindow[/b:846deb17c0], o Word 2003 é [b:846deb17c0]OpusApp[/b:846deb17c0], o Winamp é [b:846deb17c0]BaseWindow_RootWind[/b:846deb17c0], etc.
Com isso ficamos sabendo que nome de janela usaremos como parâmetro no FindWindow() se quisermos saber se o executável está aberto ou impedir que seja aberto, alem de outros tipos de controle.
Achei muito bom para o que eu queria.
Se quiserem baixar o site é:
http://www.greatis.com/windowse.htm
Depois postem aqui a opinião de vocês.
Abraços.
Gostei + 0