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

Как зная хэндл окна программы определить имя ее экзешника?   Найти похожие ветки 

← →
kofman ©   (2002-10-07 23:38) [0]

Как мне зная хэндл окна определить как называется exe-файл которому оно "принадлежит"? Я конечно криво сформулировал, но все таки. Заранее спасибо.


← →
Romanl   (2002-10-08 10:08) [1]

Для начала определяешь какому процессу принадлежит окно:

Var pProcID : ^DWORD;
begin
GetMem (pProcID, SizeOf (DWORD));
GetWindowThreadProcessId (WinHandle, pProcID);
end;


а после этого используешь TProcessEntry32 примерно так:

function GetExeNameByProcID (ProcID : DWord) : String;
var
ContinueLoop : BOOL;
FSnapshotHandle : THandle;
FProcessEntry32 : TProcessEntry32;
begin
FSnapshotHandle := CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0);

FProcessEntry32.dwSize := Sizeof(FProcessEntry32);

ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);

Result := "";
while (Integer (ContinueLoop) <> 0) and (Result="") do
begin
if FProcessEntry32.th32ProcessID = ProcID then
Result := FProcessEntry32.szExeFile;
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
end;


Не забудь в uses добавить Tlhelp32


← →
kofman ©   (2002-10-09 00:03) [2]

>Romanl спасибо за ответ, только я правильно понял, что сначало надо получить pProcID, а потом передать его в GetExeNameByProcID ?


← →
Rouse_ ©   (2002-10-09 02:41) [3]

GetWindowThreadProcessId ( WinHandle, pProcID);

Желаю успехов


← →
vidiv   (2002-10-09 06:28) [4]

Romanl - пример -- дело! особенно я никогда бы не додумался:
Var pProcID : ^DWORD;
begin
GetMem (pProcID, SizeOf (DWORD));
GetWindowThreadProcessId (WinHandle, pProcID);
end;
Теперь нучил. СПАСИБО!


← →
Romanl   (2002-10-09 12:23) [5]

Рад, что смог помочь. Сам долго с этим мучался :)


← →
bytebutcher ©   (2002-10-12 03:33) [6]

Romanl
Я долго смеялся (просто кипятком писал) когда увидил строчки:

Var pProcID : ^DWORD;
begin
GetMem (pProcID, SizeOf (DWORD));
GetWindowThreadProcessId (WinHandle, pProcID);
end;


Во-первых - что указатель, что DWORD - занимают 4 байта.
Во-вторых - проще было бы написать:

Var PID : DWORD;
begin
GetWindowThreadProcessId (WinHandle, @PID);
end;


И спрашивается - нах.я извращаться???????????



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

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



Память: 0.46 MB
Время: 0.011 c
14-82959
Z-Yuri
2002-11-02 14:50
2002.11.25
Кто пользуется ERWin, RoboCase и др. средствами?


14-82991
Дремучий
2002-11-07 12:16
2002.11.25
Cтаричок Clipper...


1-82716
AL2OO2
2002-11-14 19:43
2002.11.25
Как задать массив точек?


1-82755
V-A-V
2002-11-15 12:55
2002.11.25
Версия приложения


1-82801
AM
2002-11-13 11:10
2002.11.25
message loop




   Наверх