Главная страница
    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.46 MB
Время: 0.008 c
7-33831
Kirill_S
2003-06-12 10:52
2003.09.11
скрыть процесс в Win2000


1-33599
GSergei
2003-09-01 15:11
2003.09.11
Печать


4-33854
boby
2003-07-08 17:27
2003.09.11
Как можно научить имя приложения через ей handle


3-33441
P0tia
2003-08-21 11:56
2003.09.11
Dbgrid и Excel


1-33586
AndreySoft
2003-08-28 11:18
2003.09.11
Как вставить в середину Edit а символ -





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский