Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.033 c
14-1109061668
__max__
2005-02-22 11:41
2005.03.13
Программы для настрйоки гитары.


1-1109425932
Checist [root]
2005-02-26 16:52
2005.03.13
Создание новой формы


1-1109262321
Tony Wolf
2005-02-24 19:25
2005.03.13
Как создать элемент на главной форме из ДЛЛ?


1-1109451370
0x010012
2005-02-26 23:56
2005.03.13
Что то не то!


3-1108374949
atruhin
2005-02-14 12:55
2005.03.13
IBDatabase требует ввода пароля, как избивиться




   Наверх