Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.04;
Скачать: 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 вся ветка

Текущий архив: 2007.03.04;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.071 c
6-1159248027
WhiteBarin
2006-09-26 09:20
2007.03.04
Как определить IP подсоединённого клиента на стандартный сервер W


15-1170648538
Slider007
2007-02-05 07:08
2007.03.04
С днем рождения ! 5 февраля


2-1171315248
koha
2007-02-13 00:20
2007.03.04
Ни как не могу добиться работы отфункции CPlApplet


2-1171016071
RASkov
2007-02-09 13:14
2007.03.04
Печать и предпредпросмотр :)


2-1171267612
olegnik
2007-02-12 11:06
2007.03.04
TBitmap (width height)