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