Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.13;
Скачать: CL | DM;

Вниз

Получить имя процесса, по хандлу окна   Найти похожие ветки 

 
Progh   (2005-01-31 08:50) [0]

Как получить имя процесса, по хандлу окна ?


 
alpet   (2005-01-31 11:25) [1]

Довольно просто.
Сначала получи id процесса функцией GetWindowThreadProcessId.
Потом с помощью функций CreateToolhelp32Snapshot, Process32First,
Process32Next создай список процессов, среди них по id можно отыскать и процесс, у которого есть и имя и название файла.


 
DVM ©   (2005-01-31 13:36) [2]

function _GetProcessFileNameByWindowHandle(Wnd: HWND): string;
var
 hProcess: THandle;
 PID: Cardinal;
 FileName: array [1..MAX_PATH] of char;
 PE: TProcessEntry32;
 Snap: Cardinal;
 OsVerInfo: TOSVersionInfo;
begin
 Result := "";
 GetWindowThreadProcessId(Wnd, @PID);
 hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, PID);
 OsVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
 if GetVersionEx(osVerInfo) then
   begin
     if OsVerInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then
       begin
         ZeroMemory(@Filename[1], SizeOf(Filename));
         GetModuleFileNameEx(hProcess, 0, @Filename[1], SizeOf(Filename));
         Result := FileName;
       end
     else
       begin
         Snap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
         if Snap <> -1 then
           begin
             PE.dwSize:=SizeOf(PE);
             if Process32First(Snap, PE) then
               repeat
                 if PE.th32ProcessID = PID then Result := PE.szExeFile;
               until not Process32Next(Snap, PE);
           end;
       end;
   end;
 CloseHandle(hProcess);
end;


 
Digitman ©   (2005-01-31 13:57) [3]

repeat
if PE.th32ProcessID = PID then
 begin
  Result := PE.szExeFile;
  Break;
 end;
until not Process32Next(Snap, PE);


 
Eraser ©   (2005-01-31 14:36) [4]

Можно после поучени дескритора процесса


GetWindowThreadProcessId(Wnd, @PID);
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, PID);


воспользоваться функцией GetModuleFileName.


 
BiN ©   (2005-01-31 15:11) [5]

Eraser ©   (31.01.05 14:36) [4]

Можно после поучени дескритора процесса
воспользоваться функцией GetModuleFileName.


Нет, нельзя.
А вот воспользоваться функцией GetModuleFileNameEx можно.


 
DVM ©   (2005-01-31 15:36) [6]


> Digitman ©   (31.01.05 13:57) [3]


>  Break;

да, так лучше :)


 
Eraser ©   (2005-01-31 16:02) [7]

BiN ©
А почему нельзя???
С dll работала точно, не знаю как с EXE, но в справке не указано какие именно модули, там написано исполняемые модули.


 
BiN ©   (2005-01-31 16:16) [8]

Eraser ©   (31.01.05 16:02) [7]

С dll работала точно, не знаю как с EXE


Практика - критерий истины. (наверно, (с))


 
Eraser ©   (2005-01-31 16:21) [9]

BiN ©
Бывает ;-)))



Страницы: 1 вся ветка

Текущий архив: 2005.03.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
4-1105724518
Zorro
2005-01-14 20:41
2005.03.13
Как поместить ехе в пуск>программы>автозагрузка


1-1109665524
Ivolg
2005-03-01 11:25
2005.03.13
TrayIcon


3-1108306149
UVV
2005-02-13 17:49
2005.03.13
Почему не работает запрос в Oracle?


3-1108213711
cherrex
2005-02-12 16:08
2005.03.13
Перенос из одной БД в другую


14-1108800748
_lam
2005-02-19 11:12
2005.03.13
vcl.h