Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2009, 20:51   #1
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию Как различить два процесса одного приложения?

Подскажите как можно различить два процесса одного класса. Например, Word имеет класс Word.Application. Если пользователь запустит свой word, а я из программы — свой, то они будут иметь различных родителей: у моего будет svchost.exe, а у пользовательского — тот, из которого он его запустил, например, explorer.exe. Вот мне нужно их различить. Какой процесс запустил я, а какой — пользователь. К сожалению, в Delphi не силен, но постараюсь перевести на понятный мне Visual Basic.
Я нашел две функции:
Код:
Private Declare Function GetParent Lib "user32" Alias "GetParent" (ByVal hwnd As Long) As Long
Private Declare Function GetHandleInformation Lib "kernel32" Alias "GetHandleInformation" (ByVal hObject As Long, lpdwFlags As Long) As Long
Объявлены они на VB, но думаю, что это большого значения не имеет.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 31.03.2009, 21:01   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

получить ID родителя процесса
Код:
type
  PROCESS_BASIC_INFORMATION = packed record
    ExitStatus: DWORD;
    PebBaseAddress: Pointer;
    AffinityMask: DWORD;
    BasePriority: DWORD;
    uUniqueProcessId: Ulong;
    uInheritedFromUniqueProcessId: Ulong;
  end;

function  NtQueryInformationProcess(
    ProcessHandle : THandle;
    ProcessInformationClass : Byte;
    ProcessInformation : Pointer;
    ProcessInformationLength : ULONG;
    ReturnLength : PULONG
  ): DWORD; stdcall; external 'ntdll.dll';

function GetOwnedProcessID(const dwProcessHandle: DWORD): DWORD;
const
  ProcessBasicInformation = 0;
var
  Info: PROCESS_BASIC_INFORMATION;
begin
  Result := 0;
  if NtQueryInformationProcess(dwProcessHandle,
    ProcessBasicInformation, @Info, SizeOf(Info), nil) = NO_ERROR then
    Result := Info.uInheritedFromUniqueProcessId;
end;
rpy3uH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сравнить содержание одного и тогоже файла? Волк Общие вопросы Delphi 36 07.02.2009 18:40
Как округлять числа до целых и как оставить два знака после запятой. bles Помощь студентам 9 19.02.2008 21:53
Показывать ранг процесса в Диспетчере Задач как системный BanDit Win Api 1 30.07.2007 15:02
два TMediaPlayer и два AVI-файла zeleniy Компоненты Delphi 0 01.06.2007 14:14