Listar executáveis em execução
18/06/2009
0
Galera, estou procurando a um tempão já e não acho em lugar nenhum como listar no delphi todos os programas que estão em execução no momento.
Varios exemplos que encontrei utilizam o findwindow, mas este não funciona para mim pois o programa que estou procurando não tem janela em exibição.
Tenho um programa que roda tanto como tarefa quanto como serviço, e tenho uma funçãozinha para não permitir que ele seja executado mais de uma vez simultaneamente (utilizando o createmutex), ocorre que quando ele está iniciado como serviço, se eu tentar executar diretamente a partir do EXE, ele não detecta que a outra instancia ja está em execução e abre o programa novamente. Ja tentei de tudo para tentar fazer com que ele enxergue mas não vai.
Por este motivo estou achando que a saída será procurar pelo executável em execução, se ja exisitr o outro executável na memória quer dizer que o programa ja esta aberto.
Alguém sabe como posso fazer isso? Ou então uma maneira de conseguir fazer o mutex identificar o serviço no ar?
Em tempo, ja tentei fazer esse controle também usando o componente Jedi, TJVAppInstances, mas este também não funcionou.
Obrigado.
Varios exemplos que encontrei utilizam o findwindow, mas este não funciona para mim pois o programa que estou procurando não tem janela em exibição.
Tenho um programa que roda tanto como tarefa quanto como serviço, e tenho uma funçãozinha para não permitir que ele seja executado mais de uma vez simultaneamente (utilizando o createmutex), ocorre que quando ele está iniciado como serviço, se eu tentar executar diretamente a partir do EXE, ele não detecta que a outra instancia ja está em execução e abre o programa novamente. Ja tentei de tudo para tentar fazer com que ele enxergue mas não vai.
Por este motivo estou achando que a saída será procurar pelo executável em execução, se ja exisitr o outro executável na memória quer dizer que o programa ja esta aberto.
Alguém sabe como posso fazer isso? Ou então uma maneira de conseguir fazer o mutex identificar o serviço no ar?
Em tempo, ja tentei fazer esse controle também usando o componente Jedi, TJVAppInstances, mas este também não funcionou.
Obrigado.
Prgdelphi
Curtir tópico
+ 0
Responder
Posts
02/07/2009
Nasguone
coloqe no form um botao e um memo - o processo lista todos os aplicaivos rodando tipo gerenciador detrefas do windows.
Espero qu te ajude
E.C.S
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TMainForm = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
function EnumWindowsFunc(Handle: THandle; List: TStringList) : boolean ; stdcall;
var
caption: array[0..256] of Char;
begin
if GetWindowText (Handle, Caption, SizeOf(Caption)-1) <> 0 then
begin
List.Add(Caption) ;
SetWindowText(Handle, PChar(´About - ´ + Caption)) ;
end;
result :=True;
end;
procedure TMainForm.Button1Click(Sender: TObject);
begin
Memo1.Clear;
EnumWindows(@EnumWindowsFunc, LParam(Memo1.Lines)) ;
end;
end.
Espero qu te ajude
E.C.S
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TMainForm = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
function EnumWindowsFunc(Handle: THandle; List: TStringList) : boolean ; stdcall;
var
caption: array[0..256] of Char;
begin
if GetWindowText (Handle, Caption, SizeOf(Caption)-1) <> 0 then
begin
List.Add(Caption) ;
SetWindowText(Handle, PChar(´About - ´ + Caption)) ;
end;
result :=True;
end;
procedure TMainForm.Button1Click(Sender: TObject);
begin
Memo1.Clear;
EnumWindows(@EnumWindowsFunc, LParam(Memo1.Lines)) ;
end;
end.
Responder
21/07/2017
Fabricio Martins
Nossa eu estou querendo fazer algo assim porem quando tento usar o seus condigos fica dando erro na esguite linha em About não sei se é eu que estou sem logica de comandos. :\\
SetWindowText(Handle, PChar(´About - ´ + Caption)) ;
SetWindowText(Handle, PChar(´About - ´ + Caption)) ;
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); procedure Memo1Change(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} function EnumWindowsFunc(Handle: THandle; List: TStringList) : boolean ; stdcall; var caption: array[0..256] of Char; begin if GetWindowText (Handle, Caption, SizeOf(Caption)-1) <> 0 then begin List.Add(Caption) ; SetWindowText(Handle, PChar(´About - ´ + Caption)) ; end; result :=True; end; procedure TForm.Button1Click(Sender: TObject); begin Memo1.Clear; EnumWindows(@EnumWindowsFunc, LParam(Memo1.Lines)) ; end; end.
Responder
Clique aqui para fazer login e interagir na Comunidade :)