Lister tous les exe lancés sur le système

Uses
Psapi, tlhelp32;

procedure CreateWin9xProcessList(List : TStringList) ;
var
hSnapShot : THandle;
ProcInfo : TProcessEntry32;
begin
if List = nil then Exit ;
hSnapShot := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapShot <> THandle(-1)) then
begin
ProcInfo.dwSize := sizeof(ProcInfo) ;
if (Process32First(hSnapshot, ProcInfo)) then
begin
List.Add( ProcInfo.szExeFile) ;
while (Process32Next(hSnapShot, ProcInfo)) do
List.Add(ProcInfo.szExeFile) ;
end ;
CloseHandle(hSnapShot) ;
end ;
end ;

procedure CreateWinNTProcessList(List : TStringList) ;
var
PIDArray : array [0..1023] of DWORD ;
cb : DWORD ;
I : integer ;
ProcCount : integer ;
hMod : HMODULE ;
hProcess : THandle ;
ModuleName : array [0..300] of char ;
begin
if List = nil then Exit ;
EnumProcesses(@PIDArray, sizeof(PIDArray), cb) ;
ProcCount := cb div sizeof(DWORD) ;
for I := 0 to ProcCount-1 do
begin
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or
PROCESS_VM_READ,
false,
PIDArray[I]) ;
if (hProcess <> 0) then
begin
EnumProcessModules(hProcess, @hMod, sizeof(hMod), cb) ;
GetModuleFilenameEx(hProcess,hMod,ModuleName,sizeof(ModuleName));
List.Add(ModuleName);
CloseHandle(hProcess);
end;
end;
end;

procedure GetProcessList(Var List : TStringList) ;
var ovi : TOSVersionInfo ;
begin
if List = nil then Exit ;
ovi.dwOSVersionInfoSize := sizeof(TOSVersionInfo) ;
GetVersionEx(ovi) ;
case ovi.dwPlatformId of
VER_PLATFORM_WIN32_WINDOWS : CreateWin9xProcessList(List) ;
VER_PLATFORM_WIN32_NT : CreateWinNTProcessList(List) ;
end
end;

function EXE_Running(FileName : String; fullpath : boolean) : boolean;
var
i : integer ;
MyProcList : TStringList;
begin
MyProcList := TStringList.Create;
try
GetProcessList(MyProcList) ;
result := false;
if MyProcList = nil then Exit;
for i := 0 to MyProcList.Count - 1 do
begin
if not fullpath then
begin
if CompareText(ExtractFileName(MyProcList.Strings[i]),FileName) = 0 then result := true
end else
if CompareText(MyProcList.Strings[i],FileName) = 0 then result := true;
if result then break;
end;
finally
MyProcList.Free ;
end;
end;


// Exemple 1: est-ce l'exe a été lancé ?
procedure TForm1.Button1Click(Sender: TObject);
begin
if EXE_Running('notepad.exe',false) then
ShowMessage('EXE is running')
else
ShowMessage('EXE is not running');
end;


// Exemple 2: les exe lancés
procedure TForm1.Button3Click(Sender: TObject);
var
i : integer ;
MyProcList : TStringList;
begin
MyProcList := TStringList.Create;
try
GetProcessList(MyProcList) ;
if MyProcList = nil then Exit;
for i := 0 to MyProcList.Count - 1 do
ListBox1.items.add(MyProcList.Strings[i]);
finally
MyProcList.Free;
end;
end;
Ajouter un commentaire
Pseudo
Adresse email
Site internet (optionnel)
Votre commentaire
Fiche de l'article
Mise a jour30/11/2001
VisualisationVu 767 fois
PublicInternaute zz
CategorieDelphi - Trucs et astuces - Systeme
Auteur de l'article
SwissDelphiCenter SwissDelphiCenter
connecté le 02/11/2011
329 articles dans la section
Contacter l'auteur