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 будет то что тебе надо. |
|
|
|