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

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

Наверх




Память: 0.48 MB
Время: 0.024 c
3-82616
Геннадий
2002-11-04 16:16
2002.11.25
Delphi & MS Access - как открыть и работать?


3-82657
Dbrf
2002-11-06 14:14
2002.11.25
Фильтрация данных


7-83034
Vader
2002-09-25 10:46
2002.11.25
Как программно определить значения переменных окружения?


3-82631
KAA
2002-10-31 22:27
2002.11.25
Запрос работает по разному.


1-82731
Maksss
2002-11-15 03:34
2002.11.25
TaskManager