pobrac Handle uruchomionej aplikacji

0

Hej

Chcialbym pobrac pelne sciezki wszystkich aplikacji ktore sa widzialne (ISVisible) czyli maja otwarte okna na pulpicie.
Jak to zrobic?
dzieki wielkie

0

Jeśli masz na myśli TApplication.Handle (program napisany w Delphi, BCB) to w rzeczywistości jest to uchwyt okna. Jak znasz pID (ProcessID), to dokonujesz enumeracji okien utworzonych przez ten process, znajdujesz okno, którego Class-a = 'TApplication' i odczytujesz Handle.

Jeśli masz na myśli aplikację napisaną w innym środowisku programistycznym, to, ...hmmm..., chyba nie ma w ogóle czegoś takiego, jak Handle aplikacji (ale pewności 100%-owej nie mam).
Co najwyżej Handle okna głównego, Handle procesu, Handle wątku głównego...

0

chodzi mi konkretnie o to co napisalem wyzej

0

Mam rozwiazanie !!
Wszystko rozchodzilo sie o funkcje GetWindowThreadProcessID o ktorej istnieniu nie wiedzialem.

Kod wyglada w takim razie banalnie:

function GetPath(h:THandle):string;
var
  cb,MyPID: DWORD;
  hMod: HMODULE;
  hProcess: THandle;
  ModuleName: array [0..300] of Char;
begin
 //pobierz PID dla danego Handle
 GetWindowThreadProcessID(h, @MyPID);

 //pobierz sciezke dla pID
  hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or
      PROCESS_VM_READ,
      False,
      MyPID);
  if (hProcess <> 0) then
    begin
      EnumProcessModules(hProcess, @hMod, SizeOf(hMod), cb);
      GetModuleFilenameEx(hProcess, hMod, ModuleName, SizeOf(ModuleName));
      result:=ModuleName;
      CloseHandle(hProcess);
    end;
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1