Les Processus
Classes
Les classes qui gèrent les processus :
Astuces
Trouver le filename complet d'une commande
Exemple : trouver le filename complet de la commande php.
Grâce a la fonction FindFilenameOfCmd(ProgramFilename: string): string qui se trouve dans l'unit UTF8Process (voir ci-dessus)
FindFilenameOfCmd('php') ⇒ C:\Program Files\php\php-7.3.6\php.exe
Cette fonction utilise les fonctions suivantes : fileutil:FindDefaultExecutablePath qui parcours tous les PATHs a la recherche de ce fichier (grâce à fileutil:SearchFileInPath).
N'aurait t'il pas été plus facile d'utiliser
JwaPsApi:GetProcessImageFileName ou QueryFullProcessImageNameA en passant le Handle du TProcess pour retrouver ce nom de fichier ???
Trouver le nom complet d'un Processus avec QueryFullProcessImageName
Ci dessous :
GetFullProcessImageNameretourne le nom de fichier complet en fonction du Handle du procesusGetFullProcessImageNameByProcIDretourne le nom de fichier complet en fonction de l'ID du procesus.
(Récupere le Handle avec unOpenProcesspuis appelGetFullProcessImageName)
uses Windows; ... function GetFullProcessImageName(const AProcessHandle: THandle): string; var vS: UnicodeString; vLen: DWORD; begin vLen := MAX_PATH; vS := ''; SetLength(vS, vLen); Result := ''; //par defaut if QueryFullProcessImageNameW(AProcessHandle, 0, @vS[1], @vLen) then begin SetLength(vS, vLen); Result := UTF8Encode(vS); end; end; function GetFullProcessImageNameByProcID(const AProcId: DWord): string; var vHandle: THandle; begin Result := ''; vHandle := OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, False, AProcId); if vHandle > 0 then begin try Result := GetFullProcessImageName(vHandle); finally CloseHandle(vHandle); end; end; end;
Énumérer les processus
uses JwaTlHelp32 ; // ATTENTION bien JwaTlHelp32, pas JwaWindows, sinon ça marche pas ! ... procedure EnumProc; var ContinueLoop: BOOL; FSnapshotHandle: THandle; FProcessEntry32: TProcessEntry32; begin FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); FProcessEntry32.dwSize := SizeOf(FProcessEntry32); ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32); while integer(ContinueLoop) <> 0 do begin Form1.MMLog.Lines.Add('Process exe[%s]', [FProcessEntry32.szExeFile]); ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32); end; CloseHandle(FSnapshotHandle); end;
Énumérer les fenêtres actives
uses Windows; ... function EnumWindowsProc(WHandle: HWND; LParM: LParam): longbool; stdcall; export; var vTitleC, vClassC: array[0..128] of char; vTitle, vClass: string; begin Result := True; GetWindowText(wHandle, vTitleC, 128); GetClassName(wHandle, vClassC, 128); vTitle := vTitleC; vClass := vClassC; Form1.MMLog.Lines.Add('Window Title[%s], Class[%s], Handle[%d], %s', [vTitle, vClass, whandle, BoolToStr(IsWindowVisible(wHandle), 'Visible', 'Caché')]); end; ... // On appel cette procédure avec : EnumWindows(@EnumWindowsProc, 0);
Vous pourriez laisser un commentaire si vous étiez connecté.