Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Отследить запуск чужого приложения


Автор: MastaSlash 28.5.2006, 10:38
Как узнать если во время работы моей программы запустили конкретное приложение (например prog.exe) ???? 
И как узнать где оно находится (путь к prog.exe) ??  

Автор: Nickel 28.5.2006, 11:19
Код

uses PsAPI;

Function FindProcess(ExeName:string):string;
var
  PIDArray   : array [0..1023] of DWORD;
  cb         : DWORD;
  I          : Integer;
  ProcCount  : Integer;
  hMod       : HMODULE;
  hProcess   : THandle;
  ModuleName : array [0..1024] of Char;
begin
  Result := '';
  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));
          if UpperCase(ExtractFileName(ModuleName))=UpperCase(ExeName) then Result:=ModuleName;
       end;
    CloseHandle(hProcess);
  end
end;

Если prog.exe запущен, то  FindProcess('prog.exe') возвращает полный путь к prog.exe, иначе - ''. Просто проверяй по таймеру, если FindProcess возвратит не '', то программа запущена. 

Автор: BinaryEvil 28.5.2006, 19:53
в качестве альтернативы:
хук WH_CBT на HCBT_CREATEWND если у приложения есть окна 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)