Detectar se um determinado programa está sendo executado
Pesquisei no forum todo e não achei nada que esclarecesse especificamente sobre isso.
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.
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
Curtidas 0
Respostas
Psyjacko
26/07/2008
use a função
e passe como parâmetro o caption da janela do programa que deseja saber se está sendo executado
FindWindow()
e passe como parâmetro o caption da janela do programa que deseja saber se está sendo executado
GOSTEI 0
Cps.art
26/07/2008
Como disse na pergunta inicial, o programa é de terceiros e nem sei que linguagem é, quanto mais saber o Caption da janela.
A idéia é tentar saber se um executável está ativo, e se tendo somente o nome dele, isso seria possível.
Agradeço.
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
Wdrocha
26/07/2008
Pq vc não faz assim....
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
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
.lg.
26/07/2008
Esse forma tmbém é válida para verificar executáveis !?
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:
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
Wdrocha
26/07/2008
Pelo q entendi...
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
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
.lg.
26/07/2008
Pelo q entendi...
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
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
Wdrocha
26/07/2008
Assim...
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...
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
.lg.
26/07/2008
Assim...
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...
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
Wdrocha
26/07/2008
Eu já tinha entendido...mas eu pensei q servisse pra vc...
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??
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
.lg.
26/07/2008
Eu já tinha entendido...mas eu pensei q servisse pra vc...
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??
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
Wdrocha
26/07/2008
vc pode olhar lá em...
Iniciar....programas....
delphi 7....Ms Sdk....
Win32s Reference procura por EnumWindows
espero ter ajudado vlw
Iniciar....programas....
delphi 7....Ms Sdk....
Win32s Reference procura por EnumWindows
espero ter ajudado vlw
GOSTEI 0
Cps.art
26/07/2008
O meu problema é identico ao do [b:3c65feffb9]lg[/b:3c65feffb9], e ele acabou colocando as dúvidas dele que serviram para mim.
Vou fazer um teste aqui depois coloco o resultado aqui no forum.
Valeu pessoal.
Abraços.
Vou fazer um teste aqui depois coloco o resultado aqui no forum.
Valeu pessoal.
Abraços.
GOSTEI 0
Wdrocha
26/07/2008
Ei pow...
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
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
Wdrocha
26/07/2008
Faz o seguinte...
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...
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
Cps.art
26/07/2008
Ai pessoal, descobri um programinha chamado [b:846deb17c0]WinDowse[/b:846deb17c0] que me mostra a classe do executável aberto.
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.
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
Wdrocha
26/07/2008
Correção...
na função de CallBack
a declaração não é
Bar Buf : Array [0..255] Of Char;
Desculpem...é...
Var Buf : Array [0..255] Of Char;
na função de CallBack
a declaração não é
Bar Buf : Array [0..255] Of Char;
Desculpem...é...
Var Buf : Array [0..255] Of Char;
GOSTEI 0
Wdrocha
26/07/2008
Olá....
não sei se ainda precisam...
mas navegando na Net....encontrei este artigo...ele mostra todos os processos....inclusive os nomes dos executáveis...
[url]http://www.activedelphi.com.br/modules.php?op=modload&name=News&file=article&sid=369[/url]
Flw...
não sei se ainda precisam...
mas navegando na Net....encontrei este artigo...ele mostra todos os processos....inclusive os nomes dos executáveis...
[url]http://www.activedelphi.com.br/modules.php?op=modload&name=News&file=article&sid=369[/url]
Flw...
GOSTEI 0
.lg.
26/07/2008
Olá....
não sei se ainda precisam...
mas navegando na Net....encontrei este artigo...ele mostra todos os processos....inclusive os nomes dos executáveis...
[url]http://www.activedelphi.com.br/modules.php?op=modload&name=News&file=article&sid=369[/url]
Flw...
GRANDE WDRocha!!!
:D
Quem ti viu, quem ti ve.
hehehe.
GOSTEI 0
Wdrocha
26/07/2008
Esquenta não....
qualquer coisa....tamo aew....
Espero q seja o q vc precisava....
Flw....
qualquer coisa....tamo aew....
Espero q seja o q vc precisava....
Flw....
GOSTEI 0