Суббота, 05.10.2024, 09:23 Приветствую вас Гость | Группа "Гости" 
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: xXxSh@dowxXx, Anton93, Волк-1024  
Как узнать имя процесса зная хэндл его окна (или имя)?
ramzeswrДата: Пятница, 09.01.2015, 17:07 | Сообщение # 1
Участник
Зарегистрирован: 17.04.2013
Группа: Пользователи
Сообщений: 61
Статус: Offline
Весь гугл перерыл, толкового ответа не нашел.
Определяю имя активного окна функцией:
Код
function GetEWName: string;
var
   header:HWND;
   apchar:array[0..254] of char;
begin
   header:=GetForegroundWindow;
   GetWindowText(header, apchar, Length(apchar));
   result := ' [ '+apchar+' ] ';
end;


Но помимо имени окна, мне нужно еще узнать имя процеса, которым создано это окно.
В конечном итоге result хочу такой: [ Вопросы по Delphi - Google Chrome ] { chrome.exe }

У кого нибудь есть наработки, кто может помочь?
 
VolfДата: Пятница, 09.01.2015, 20:03 | Сообщение # 2
Частый гость
Зарегистрирован: 11.04.2013
Группа: Пользователи
Сообщений: 41
Статус: Offline
Как, зная Handle окна программы, определить имя EXE

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

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
 
ramzeswrДата: Пятница, 09.01.2015, 20:26 | Сообщение # 3
Участник
Зарегистрирован: 17.04.2013
Группа: Пользователи
Сообщений: 61
Статус: Offline
Цитата Volf ()

Не работает все это, проверял уже
 
VolfДата: Суббота, 10.01.2015, 14:12 | Сообщение # 4
Частый гость
Зарегистрирован: 11.04.2013
Группа: Пользователи
Сообщений: 41
Статус: Offline
У меня работает
 
ramzeswrДата: Суббота, 10.01.2015, 14:25 | Сообщение # 5
Участник
Зарегистрирован: 17.04.2013
Группа: Пользователи
Сообщений: 61
Статус: Offline
Цитата Volf ()
У меня работает

Кинь проектом пожалуйста
 
VolfДата: Воскресенье, 11.01.2015, 00:50 | Сообщение # 6
Частый гость
Зарегистрирован: 11.04.2013
Группа: Пользователи
Сообщений: 41
Статус: Offline
Вот проще.
var h: dword;
buf: array[0..255] of char;
begin
GetWindowThreadProcessId(Handle, h);
GetModuleFileName(windows.OpenProcess(0, false, h), @buf[0], 255);
end;
В buf будет то что тебе надо.
 
  • Страница 1 из 1
  • 1
Поиск:

delphicode.ru © 2008 - 2024 Хостинг от uCoz