Fórum Detectar se um determinado programa está sendo executado #361669

26/07/2008

0

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.


Cps.art

Cps.art

Responder

Posts

26/07/2008

Psyjacko

use a função
FindWindow()

e passe como parâmetro o caption da janela do programa que deseja saber se está sendo executado



Responder

Gostei + 0

26/07/2008

Cps.art

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.


Responder

Gostei + 0

28/07/2008

Wdrocha

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


Responder

Gostei + 0

30/07/2008

.lg.

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:


Responder

Gostei + 0

30/07/2008

Wdrocha

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


Responder

Gostei + 0

30/07/2008

.lg.

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???


Responder

Gostei + 0

30/07/2008

Wdrocha

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...


Responder

Gostei + 0

30/07/2008

.lg.

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? :)


Responder

Gostei + 0

30/07/2008

Wdrocha

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??


Responder

Gostei + 0

30/07/2008

.lg.

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:


Responder

Gostei + 0

30/07/2008

Wdrocha

vc pode olhar lá em...

Iniciar....programas....
delphi 7....Ms Sdk....

Win32s Reference procura por EnumWindows


espero ter ajudado vlw


Responder

Gostei + 0

30/07/2008

Cps.art

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.


Responder

Gostei + 0

30/07/2008

Wdrocha

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


Responder

Gostei + 0

30/07/2008

Wdrocha

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...


Responder

Gostei + 0

30/07/2008

Cps.art

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.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar