Ceci est une ancienne révision du document !


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

Énumérer les processus

function WindowsAppIsRunning(const ExeName: string): integer;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
 
begin
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
  Result := 0;
 
  while integer(ContinueLoop) <> 0 do
    begin
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
      UpperCase(ExeName)) or (UpperCase(FProcessEntry32.szExeFile) =
      UpperCase(ExeName))) then
      begin
      Inc(Result);
      // SendMessage(Exit-Message) possible?
      end;
    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é.