Hej
Chcialbym pobrac pelne sciezki wszystkich aplikacji ktore sa widzialne (ISVisible) czyli maja otwarte okna na pulpicie.
Jak to zrobic?
dzieki wielkie
Hej
Chcialbym pobrac pelne sciezki wszystkich aplikacji ktore sa widzialne (ISVisible) czyli maja otwarte okna na pulpicie.
Jak to zrobic?
dzieki wielkie
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...
chodzi mi konkretnie o to co napisalem wyzej
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;