Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> получить PID родителя, чужого приложения 
V
    Опции темы
Prof_2000
Дата 30.9.2006, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 26.3.2005
Где: Харьков, Украина

Репутация: нет
Всего: 1



Необходимо определить, какой процесс вызвал указанный процесс. Есть PID потомка. Соответственно, нужен PID его родителя. Нашел способ узнать PID родителя собственного приложения. Подскажите, пожалуйста, как сделать то же но для чужого приложения.
--------------------
Pereant qui ante nos nostra dixerunt! (лат.)      Да погибнут те, кто раньше нас высказал наши мысли!   
PM MAIL WWW ICQ   Вверх
Rennigth
Дата 2.10.2006, 09:52 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 8
Всего: 76



Код


function GetOwnerProcessID(APID: DWord): DWord;
var
  lSnapHandle: THandle;
  lProcStruct: PROCESSENTRY32;
  lPID: DWord;
begin
  Result := INVALID_HANDLE_VALUE;
  try
    lSnapHandle := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
    if (lSnapHandle <> INVALID_HANDLE_VALUE) and (APID <> INVALID_HANDLE_VALUE) then
    begin
      lProcStruct.dwSize := SizeOf(PROCESSENTRY32);
      if Process32First(lSnapHandle, lProcStruct) then
      begin
        repeat
          lPID := lProcStruct.th32ProcessID;
          if lPID = APID then
          begin
            Result := lProcStruct.th32ParentProcessID;
            Break;
          end;
        until not Process32Next(lSnapHandle, lProcStruct);
      end;
    end;
    CloseHandle(lSnapHandle);
  except
    raise EExternalException.Create(GetLastErrorString);
  end;
end;

function GetLastErrorString: string;
var
  lz: Cardinal;
  lErr: array[0..512] of Char;
begin
  lz := GetLastError;
  FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nil, lz, 0, @lErr, 512, nil);
  Result := string(lErr);
end;




--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Prof_2000
Дата 2.10.2006, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 26.3.2005
Где: Харьков, Украина

Репутация: нет
Всего: 1



Спасибо большое. Все работает.
PM MAIL WWW ICQ   Вверх
sOckets
Дата 3.10.2006, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

Репутация: нет
Всего: 2



А если родитель мёртв то что тогда будешь делать ?  smile 


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
Prof_2000
Дата 3.10.2006, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 26.3.2005
Где: Харьков, Украина

Репутация: нет
Всего: 1



Насколько я понял, полученный PID - тот, что сохраняется в заголовке процесса при старте, а значит возвращаться значение будет всегда. А если в данный момент процесса с возвращенным PID_ом нет, то делать ничего и не буду. Нестыковка будет только если старый процесс закрыт, зато открыт другой с тем же PID(бывают же совпадения...), но ничего страшного...
--------------------
Pereant qui ante nos nostra dixerunt! (лат.)      Да погибнут те, кто раньше нас высказал наши мысли!   
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0442 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.