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

Вниз

Можно ли получить Handle процесса, не зная его PID?   Найти похожие ветки 

 
Vorobyev Sergey   (2003-07-10 10:24) [0]

Привет всем!
Ситуация следующая:
Есть процессА, который запускает процессБ (с помощью CreateProcess).
Необходимо в процессеБ получить Handle процессаА, наподобие OpenProcess, при этом не передавая и не зная идентификатора (PID) процессаА?
Нельзя как-нибудь унаследовав Handle процессаА, получить его в процессеБ (подобно семафорам и мутексам, используя InheritHandles)

Спасибо


 
MBo ©   (2003-07-10 10:27) [1]

проще всего записать ProcessID A, например, в именованный MMF, и считать его из B.
А можно и передать его как параметр командной строки.


 
Игорь Шевченко ©   (2003-07-10 10:48) [2]

В Nt/2000/XP можно через NtQueryInformationProcess (ProcessBasicInformation, ...) в возвращаемой структуре данных есть поле InheritedFromProcessId


 
Vorobyev Sergey   (2003-07-10 10:53) [3]


> MBo © (10.07.03 10:27)
> проще всего записать ProcessID A, например, в именованный
> MMF, и считать его из B.
> А можно и передать его как параметр командной строки.

Согласен, что так можно..
Процесс ID можно передать различными способами..
НО, интересует именно МОЖНО ЛИ ПОЛУЧИТЬ Handle ПРОЦЕССА БЕЗ PID?


> Игорь Шевченко © (10.07.03 10:48)

К сожалению :-((( программа должна работать как под управлением Win9x, так и NT/2000/XP


 
MBo ©   (2003-07-10 10:59) [4]

ToolHelp32 - PROCESSENTRY32.th32ParentProcessID

>МОЖНО ЛИ ПОЛУЧИТЬ Handle ПРОЦЕССА БЕЗ PID
Зачем? Для дуплицирования все равно нужен дескриптор процесса.


 
Набережных С. ©   (2003-07-10 17:41) [5]

procedure TForm1.SpeedButton1Click(Sender: TObject);
var
hPrc: THandle;
si: TStartupInfo;
pi: TProcessInformation;
Params: string;
begin
hPrc:=OpenProcess(MAXIMUM_ALLOWED, true, GetCurrentProcessId);
FillChar(si, Sizeof(si), 0);
si.cb:=Sizeof(si);
Params:="""+ParamStr(0)+"""+" "+IntToStr(hPrc);
if CreateProcess(nil, PChar(Params), nil, nil, true, 0, nil, nil, si, pi)then
begin
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
end;
CloseHandle(hPrc);
end;

procedure TForm1.FormShow(Sender: TObject);
var
hPrc: THandle;
begin
Edit1.Text:=IntToStr(GetCurrentProcessId);
if ParamCount = 1 then
begin
hPrc:=StrToInt(ParamStr(1));
TerminateProcess(hPrc, 0);
( hPrc)
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
hPrc: THandle;
si: TStartupInfo;
pi: TProcessInformation;
Params: string;
begin
hPrc:=OpenProcess(MAXIMUM_ALLOWED, true, GetCurrentProcessId);
FillChar(si, Sizeof(si), 0);
si.cb:=Sizeof(si);
Params:="""+ParamStr(0)+"""+" "+IntToStr(hPrc);
if CreateProcess(nil, PChar(Params), nil, nil, true, 0, nil, nil, si, pi)then
begin
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
end;
CloseHandle(hPrc);
end;

procedure TForm1.FormShow(Sender: TObject);
var
hPrc: THandle;
begin
Edit1.Text:=IntToStr(GetCurrentProcessId);
if ParamCount = 1 then
begin
hPrc:=StrToInt(ParamStr(1));
TerminateProcess(hPrc, 0);
CloseHandle(hPrc);
end;
end;



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

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

Наверх




Память: 0.48 MB
Время: 0.018 c
1-33659
Chlavik
2003-08-28 21:20
2003.09.11
Исдевательсво над PopupMenu


1-33670
Erik
2003-08-29 16:06
2003.09.11
Обработка событий popup до отработки вызвовшей процедуры.


1-33594
Эдуард
2003-08-28 12:39
2003.09.11
При попытке соединения с Word - Не удается найти указанное меню


3-33482
denick
2003-08-20 12:32
2003.09.11
SQL запрос.


3-33439
P0tia
2003-08-21 19:05
2003.09.11
Про excel