Как узнать имя процесса зная хэндл его окна (или имя)?
|
|
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 будет то что тебе надо.
|
|
| |