Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2016.04.24;
Скачать: CL | DM;

Вниз

Проверить существование родительского процесса   Найти похожие ветки 

 
lexi   (2010-06-19 16:12) [0]

Подскажите как можно это сделать? На ум приходит разве что проверка времени..

Сам родительский процесс ищется стандартно, через CreateToolhelp32Snapshot и th32ParentProcessID


 
sniknik ©   (2010-06-19 18:26) [1]

> Сам родительский процесс ищется стандартно ...
т.е. найти свой по текущему id и вытащить из информации о нем id родителя проблем не представляет, а вот попытаться найти по вытащенному id процесс и посмотреть находит его или нет проблема? ... жуть, и вам хватает наглости писать в винапи, а не в начинающие.


 
[true]trix ©   (2010-06-19 18:54) [2]

Что-то типа того, погугри инет по этому коду.

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
       { Просматриваем процессы, пока не будет
       найдено совпадение http://www.chipdisk.ru }
       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
{ Обработка первого модуля первого http://byteme.ru процесса }
      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;


 
lexi   (2010-06-19 20:12) [3]

@sniknik
Насколько я помню, Id не уникальны. И после закрытия родительского процесса этот Id может оказаться у другого, нового процесса.


 
lexi   (2010-06-19 20:22) [4]

@[true]trix
Ok, буду проверять ещё и по имени. Спасибо.


 
sniknik ©   (2010-06-20 11:07) [5]

> Id не уникальны.
не уникальны... в общем. но в частности не выдается дубль используемого, т.к. иначе не возможно будет построить правильно дерево процессов. а оно системой используется. ну, это насколько я помню.

> И после закрытия родительского процесса этот Id может оказаться у другого, нового процесса.
не может, т.к. занят системой, вот когда ты и свою закроешь и освободишь его, тогда пожалуйста...

> Ok, буду проверять ещё и по имени. Спасибо.
данный пример не рабочий в 64битной среде. так для информации.


 
Посторонний   (2010-06-20 16:29) [6]


> а оно системой используется.


не используется


 
sniknik ©   (2010-06-20 16:46) [7]

> не используется
зачем голословные утверждения? просто приведи пример дубля id процесса выделенного системой до того как освободится старый. и все, спор умрет не родившись.


 
Посторонний   (2010-06-20 17:49) [8]

sniknik ©   (20.06.10 16:46) [7]

То, что дерево не используется, не влечет за собой дублирования ID процессов. Читай уже Соломона с Руссиновичем



Страницы: 1 вся ветка

Текущий архив: 2016.04.24;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.008 c
15-1439456322
olle
2015-08-13 11:58
2016.04.24
Штрих-М Повторная печать чека


2-1412352887
Желание
2014-10-03 20:14
2016.04.24
Имя метода procedure of object


15-1439447496
K-1000
2015-08-13 09:31
2016.04.24
Неверно работает RandomRange()


2-1412050405
Stepan4ik
2014-09-30 08:13
2016.04.24
Обрезать после запятой (Float)


2-1411245669
Stepan4ik
2014-09-21 00:41
2016.04.24
Function 2 значения