Форум: "WinAPI";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];
ВнизПолучить имя процесса, по хандлу окна Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.038 c