извиняюсь если комуто вопрос покажется слишком простым но я чето ничего не нашел, кроме таких же соискателей. если поможете буду признателен.
В XP sp1 и выше есть GetProcessId А так - только перебором процессов наверно... Можно ещё использовать NtQueryInformationProcess
green Согласен однозначно. SPath [url=http://msdn.microsoft.com/l...=/library/en-us/dllproc/base/getprocessid.asp]http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllpr oc/base/getprocessid.asp[/url][/url]
SPath Используй ToolHelp и не трахай мозги, этот интерфейс универсален для обеих виндовых веток, хотя немного глючит в 2к, но это мелочи. Более универсального способа и конкретного посоветовать не могу, потому как он единственно документированный в psdk, в то время, как ХхQuerySystemInformation ни в psdk ни в ddk практически неупоминается.
Если имеющийся handle позволяет, можно внедрить в процесс код, вызывающий GetCurrentProcessId. Или прямо прочитать PID из PEB процесса. Только опять таки надо версию виндовса учитывать.
в общем ясно спасибо всем за советы скорее всего прийдется ковырять через NtQuerySystemInformation поскольку toolhelp все равно его использует только будет без лишнего ну и полезней
Млин, народ, че вы мучаетесь? ZwQueryInformationProcess рулит. Код (Text): function GetProcessId(pHandle: dword): dword; var Info: PROCESS_BASIC_INFORMATION; status: NTSTATUS; begin Result := 0; status := ZwQueryInformationProcess(pHandle, ProcessBasicInformation, @Info,SizeOf(Info), nil); if NT_SUCCESS(status) then Result := Info.UniqueProcessId; end;