Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проверить существование родительского процесса [D7, WinXP]


lexi ©   (2010-06-19 16:12:00) 

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

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


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

sniknik ©   (20.06.10 16:46) [7]

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


sniknik   (2010-06-20 16:46:00) [2]

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


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


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


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


sniknik   (2010-06-20 11:07:00) [4]

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

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

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


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

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


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

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


[true]trix   (2010-06-19 18:54:00) [7]

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

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;


sniknik   (2010-06-19 18:26:00) [8]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо