Вниз
Скачать: CL | DM;

Определить путь к программе зная ее хендл окна   Найти похожие ветки 

← →
Dmitry_177   (2007-01-12 22:34) [0]

Подскажите пожалуйста, как определить путь к программе зная ее хендл окна?


← →
kaZaNoVa ©   (2007-01-12 23:38) [1]

а зачемм???


← →
Dmitry_177   (2007-01-13 00:26) [2]

Понадобилось...


← →
kaZaNoVa ©   (2007-01-13 00:56) [3]


{uses tlHelp32; }

function GetFilePath(const WinH: THandle): String;
var
SnapshotH: THandle;
PE32: TProcessEntry32;
PrId: Cardinal;
begin

Result := "";
SnapshotH := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if SnapshotH = -1 then Exit;
PE32.dwSize := SizeOf(PE32);
GetWindowThreadProcessID(WinH, PrId);
if Process32First(SnapshotH, PE32) then
repeat
if PE32.th32ProcessID = PrId then begin
 Result := PE32.szExeFile;
 Break;
end;
until not Process32Next(SnapshotH, PE32);
CloseHandle(SnapshotH)

end;


← →
Dmitry_177   (2007-01-13 01:02) [4]

У меня почему-то определяется только как: "имя.exe". Без пути...((( А мне нужен еще и путь к нему...


← →
kaZaNoVa ©   (2007-01-13 01:04) [5]

GetModuleFileName


← →
Dmitry_177   (2007-01-13 01:15) [6]

читал про GetModuleFileName, но я не пойму как определить хэндл модуля, который используется в первом параметре этой функции.. Вставлял хэндл окна, она ничего не передает в буфер...(((


← →
kaZaNoVa ©   (2007-01-13 01:18) [7]

Dmitry_177   (13.01.07 1:15) [6]
PE32.th32ProcessID попробуй ей скормить)))


← →
Almaz ©   (2007-01-13 01:21) [8]

Если не требуется поддержка Win95/98/МЕ, то можно через PSAPI:

function GetModuleFileNameEx(hProcess: THandle; hModule: THandle;
 lpFilename: PChar; nSize: Cardinal): Cardinal; stdcall;
 external "Psapi.dll" name "GetModuleFileNameExA";

function GetEXENameFromWnd(WndHandle: THandle): String;
var
 ProcessID: Cardinal;
 ProcessHandle: THandle;
 Buffer: array [0..MAX_PATH] of Char;
begin
 if GetWindowThreadProcessId(WndHandle, ProcessID) = 0 then
   RaiseLastOSError;
 ProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION or
   PROCESS_VM_READ, FALSE, ProcessID);
 if ProcessHandle = 0 then
   RaiseLastOSError;
 try
   if GetModuleFileNameEx(ProcessHandle, 0, Buffer, MAX_PATH) = 0 then
     RaiseLastOSError;
 finally
   CloseHandle(ProcessHandle);
 end;
 Result := Buffer;
end;


Удачи.


← →
Dmitry_177   (2007-01-13 01:29) [9]

Попробовал так.. не работает...(((


function GetFilePath(const WinH: THandle): String;
var
SnapshotH: THandle;
PE32: TProcessEntry32;
PrId: Cardinal;
AppFileName: TMaxPathString;
begin
Result := "";
SnapshotH := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if SnapshotH = -1 then Exit;
PE32.dwSize := SizeOf(PE32);
GetWindowThreadProcessID(WinH, PrId);
if Process32First(SnapshotH, PE32) then
repeat
if PE32.th32ProcessID = PrId then begin
Result := String(GetModuleFileName(PE32.th32ProcessID, AppFileName, SizeOf(AppFileName)));
Break;
end;
until not Process32Next(SnapshotH, PE32);
CloseHandle(SnapshotH);
end;


← →
Dmitry_177   (2007-01-13 01:30) [10]


type
 TMaxPathString = array [0..MAX_PATH - 1] of Char;


← →
Dmitry_177   (2007-01-13 01:33) [11]

Almaz, твой пример работает, спасибо )))



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.044 c
1-1168833303
ORMADA
2007-01-15 06:55
2007.03.04
Манифест XP съедает часть формы


1-1168463719
Extar
2007-01-11 00:15
2007.03.04
Разрешить редактировать только одну колонку в StringGrid как?


11-1135015016
Alex55
2005-12-19 20:56
2007.03.04
как установить indy


2-1171473191
lamer_5
2007-02-14 20:13
2007.03.04
ListView - Доступ ко второй колонке


15-1170942232
SergP
2007-02-08 16:43
2007.03.04
Кто-нить настраивал Squid под линухом?




   Наверх