-
Подскажите как можно это сделать? На ум приходит разве что проверка времени..
Сам родительский процесс ищется стандартно, через CreateToolhelp32Snapshot и th32ParentProcessID
-
> Сам родительский процесс ищется стандартно ... т.е. найти свой по текущему id и вытащить из информации о нем id родителя проблем не представляет, а вот попытаться найти по вытащенному id процесс и посмотреть находит его или нет проблема? ... жуть, и вам хватает наглости писать в винапи, а не в начинающие.
-
Что-то типа того, погугри инет по этому коду. function GetProcessModules(hWind:thandle;ProcName : String;
FullPath : Boolean;
IncludeData : Boolean) : TStringList;
var
s : String;
Found : Boolean;
Done : Boolean;
AList : TStringList;
ProcHandle : THandle;
ModHandle : THandle;
AProcEntry : TProcessEntry32;
AModEntry : TModuleEntry32;
begin
AList := TStringList.Create;
Result := AList;
AList.Sorted := True;
ProcHandle := CreateToolHelp32Snapshot
(TH32CS_SNAPALL, 0);
if ProcHandle = -1 then Exit;
AProcEntry.dwSize := sizeof(TProcessEntry32);
AModEntry.dwSize := sizeof(TModuleEntry32);
if Process32First(ProcHandle, AProcEntry)
then begin
Found :=
UpperCase(AProcEntry.szExeFile) =
UpperCase(ProcName);
if not Found
then repeat
Done := not Process32Next(ProcHandle, AProcEntry);
if not Done
then Found := UpperCase(AProcEntry.szExeFile) =
UpperCase(ProcName);
until Done or Found;
if Found
then begin
ModHandle :=
CreateToolHelp32Snapshot(TH32CS_SNAPMODULE,
AProcEntry.th32ProcessID);
if Module32First(ModHandle, AModEntry)
then begin
if IncludeData
then s := '' +
IntToStr(AModEntry.GlblcntUsage)
else s := '';
if FullPath
then s := AModEntry.szExePath + s
else s := AModEntry.szModule + s;
AList.Add(s);
while Module32Next(ModHandle, AModEntry) do
begin
if IncludeData
then s := '' +
IntToStr(AModEntry.GlblcntUsage)
else s := '';
if FullPath
then s := AModEntry.szExePath + s
else s := AModEntry.szModule + s;
AList.Add(s);
writeln(s);
end;
end;
CloseHandle(ModHandle);
end;
end;
CloseHandle(ProcHandle);
end;
-
@sniknik Насколько я помню, Id не уникальны. И после закрытия родительского процесса этот Id может оказаться у другого, нового процесса.
-
@[true]trix Ok, буду проверять ещё и по имени. Спасибо.
-
> Id не уникальны. не уникальны... в общем. но в частности не выдается дубль используемого, т.к. иначе не возможно будет построить правильно дерево процессов. а оно системой используется. ну, это насколько я помню.
> И после закрытия родительского процесса этот Id может оказаться у другого, нового процесса. не может, т.к. занят системой, вот когда ты и свою закроешь и освободишь его, тогда пожалуйста...
> Ok, буду проверять ещё и по имени. Спасибо. данный пример не рабочий в 64битной среде. так для информации.
-
> а оно системой используется.
не используется
-
> не используется зачем голословные утверждения? просто приведи пример дубля id процесса выделенного системой до того как освободится старый. и все, спор умрет не родившись.
-
sniknik © (20.06.10 16:46) [7]
То, что дерево не используется, не влечет за собой дублирования ID процессов. Читай уже Соломона с Руссиновичем
|