Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2016.04.24;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2016.04.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.002 c
2-1412352887
Желание
2014-10-03 20:14
2016.04.24
Имя метода procedure of object


15-1439386977
K-1000
2015-08-12 16:42
2016.04.24
Как сделать список TBitmap ов?


15-1439131296
Кто б сомневался
2015-08-09 17:41
2016.04.24
Ребят, а чего бы вам не объедениться с delphikingdom


15-1439587804
Юрий
2015-08-15 00:30
2016.04.24
С днем рождения ! 15 августа 2015 суббота


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский