Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


kofman ©   (2002-10-07 23:38:00) 

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


bytebutcher   (2002-10-12 03:33:00) [1]

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

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


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

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


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


Romanl   (2002-10-09 12:23:00) [2]

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


vidiv   (2002-10-09 06:28:00) [3]

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


Rouse_   (2002-10-09 02:41:00) [4]

GetWindowThreadProcessId ( WinHandle, pProcID);

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


kofman   (2002-10-09 00:03:00) [5]

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


Romanl   (2002-10-08 10:08:00) [6]

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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо