Форум: "WinAPI";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];
ВнизPID процесса Найти похожие ветки
← →
Alex870 (2005-08-19 14:39) [0]Здравствуйте!
Подскажите пожалуйста, как получить PID процесса, зная имя модуля, его породившего. Нашел функцию GetProcessId, ей передается Handle процесса, но как его получить я тоже не знаю. Зарание всем спасибо!
← →
Erik1 © (2005-08-19 15:19) [1]Вобщето можно в Help глянуть там куча функций, если конечно тебе надо получить ID текущего процеса то:
GetCurrentProcessId
← →
Digitman © (2005-08-19 15:35) [2]см. EnumProcesses() в составе psapi.pas
для каждого активного в системе процесса в ходе перечисления енумератор вернет инф.структуру, содержащую кр.всего прочего имя ехе-модуля и PID процесса
← →
BiN © (2005-08-19 15:43) [3]Digitman © (19.08.05 15:35) [2]
см. EnumProcesses() в составе psapi.pas
для каждого активного в системе процесса в ходе перечисления енумератор вернет инф.структуру, содержащую кр.всего прочего имя ехе-модуля и PID процесса
Очевидно, имелось ввиду Process32First/Next (?)
← →
Leonid Troyanovsky © (2005-08-19 16:13) [4]
> BiN © (19.08.05 15:43) [3]
> Очевидно, имелось ввиду Process32First/Next (?)
Конечно, тут следует иметь ввиду CreateToolhelp32Snapshot &etc.
По-крайней мере, оно более документировано и шире применимо.
Ну, а psapi вовсе не нужно, и успешно заменялось NtQuerySystemInformation.
--
Regards, LVT.
← →
Digitman © (2005-08-19 16:27) [5]
> BiN © (19.08.05 15:43) [3]
Toolhelp32API не рекомендуется использовать на НТ-платформе, хоть и поддерживается ей.
psapi (ProcessStatus API) был разработан специально для этих (и других связанных с этими) целей, его использование на НТ оправдано и корректно, равно как и просто.
NtQuerySystemInformation в составе NativeAPI заметно сложней в использовании, потому что эта ф-ция предоставляет самую разнородную инф-цию в гораздо большем объеме, нежели требуется для дан.задачи .. эта ф-ция, по сути, некий "пользовательский шлюз", через который можно получить самую разнородную сист.инф-цию, в т.ч. инф-цию о процессах в системе
← →
Leonid Troyanovsky © (2005-08-19 16:32) [6]
> Digitman © (19.08.05 16:27) [5]
> Toolhelp32API не рекомендуется использовать на НТ-платформе,
> хоть и поддерживается ей.
Кто не рекомендует Toolhelp32API, тот, уж подавно, не
будет рекомендовать psapi, а Nt* only.
> psapi (ProcessStatus API) был разработан специально для
> этих (и других связанных с этими) целей, его использование
> на НТ оправдано и корректно, равно как и просто.
Создан был NT3.51-4 only, и, IMHO, группой(?) двоечников.
--
Regards, LVT.
← →
BiN © (2005-08-19 16:33) [7]Digitman © (19.08.05 16:27) [5]
Toolhelp32API не рекомендуется использовать на НТ-платформе, хоть и поддерживается ей.
Имелось ввиду, что EnumProcesses() не возвращает "инф.структуру, содержащую кр.всего прочего имя ехе-модуля и PID процесса".
← →
psa247 © (2005-08-20 11:56) [8]
if name = "" then exit;
name:= UpperCase(name);
if not(EnumProcesses(@ProcList, sizeof(ProcList), Proc_count))then exit;
for i:= 0 to Proc_count div 4 - 1 do begin
ProcHandle:= OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, ProcList[i]);
if ProcHandle > 0 then begin
EnumProcessModules(ProcHandle, @ModHandle, 4, Mod_Count);
GetModuleFileNameEx(ProcHandle, ModHandle, ModName, sizeof(ModName));
if name = UpperCase(string(ExtractFileName(ModName)))then begin
// Нашли имя процесса
ProcList[i] - his PID ..... <--- look here.....
CloseHandle(ProcHandle);
end;
end;
← →
psa247 © (2005-08-20 12:08) [9]Кое-что подправишь...
← →
alpet © (2005-08-20 12:21) [10]А как понимать - "модуля его породившего". Это модуль Delphi или некоторая DLL, его "породили"? Запуск на выполнения связан с какими-нибудь событиями? Если так можно, сразу после запуска, построить список процессов, выделить в нем самый молодой (GetProcessTimes), или сравнить с предыдущим списком процессов. Как тебе может имя модуля, если это не имя исполняемого файла самого процесса, помочь, я не представляю.
← →
Digitman © (2005-08-21 13:42) [11]
> Создан был NT3.51-4 only
EnumProcesses
..
Requirements
Client Requires Windows XP, Windows 2000 Professional, or Windows NT Workstation 4.0.
Server Requires Windows Server 2003, Windows 2000 Server, or Windows NT Server 4.0.
> IMHO, группой(?) двоечников
?
← →
Leonid Troyanovsky © (2005-08-21 17:24) [12]
> > Создан был NT3.51-4 only
> Requirements
> Client Requires Windows XP, Windows 2000 Professional, or
> Windows NT Workstation 4.0.
> Server Requires Windows Server 2003, Windows 2000 Server,
> or Windows NT Server 4.0.
http://groups-beta.google.com/group/microsoft.public.win32.programmer.kernel/browse_frm/thread/bfe3257147fb910f/815c8da9 2040fd70?lnk=st&q=microsoft+kernel+ntquerysysteminformation+psapi&rnum=1#815c8da92040fd70
Кста, для NT<5 оно было redist.
> > IMHO, группой(?) двоечников
> ?
Свен Шрайбер "Недокументированные возможности Windows 2000"
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.053 c