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

Вниз

Где взять hProcess для функции WaitForInputIdle   Найти похожие ветки 

 
tipman ©   (2003-06-28 20:42) [0]

Запускаю чужую прогу с помощью ShellExecute. Нужно очень отловить окончание загрузки программы. Нашёл функцию WaitForInputIdle но для неё нужен hProcess. Где его можно взять?


 
Ученик ©   (2003-06-28 20:51) [1]

{ Project JEDI Code Library (JCL) }

function ShellExecAndWait(const FileName: string; const Parameters: string;
const Verb: string; CmdShow: Integer): Boolean;
var
Sei: TShellExecuteInfo;
Res: LongBool;
Msg: tagMSG;

begin
FillChar(Sei, SizeOf(Sei), #0);
Sei.cbSize := SizeOf(Sei);
Sei.fMask := SEE_MASK_DOENVSUBST or SEE_MASK_FLAG_NO_UI or SEE_MASK_NOCLOSEPROCESS or
SEE_MASK_FLAG_DDEWAIT;
Sei.lpFile := PChar(FileName);
Sei.lpParameters := PCharOrNil(Parameters);
Sei.lpVerb := PCharOrNil(Verb);
Sei.nShow := CmdShow;
Result := ShellExecuteEx(@Sei);
if Result then
begin
WaitForInputIdle(Sei.hProcess, INFINITE);
while (WaitForSingleObject(Sei.hProcess, 10) = WAIT_TIMEOUT) do
begin
repeat
Res := PeekMessage(Msg, Sei.Wnd, 0, 0, PM_REMOVE);
if Res then
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
until (Res = False);
end;
( Sei.hProcess) { Project JEDI Code Library (JCL) }

function ShellExecAndWait(const FileName: string; const Parameters: string;
const Verb: string; CmdShow: Integer): Boolean;
var
Sei: TShellExecuteInfo;
Res: LongBool;
Msg: tagMSG;

begin
FillChar(Sei, SizeOf(Sei), #0);
Sei.cbSize := SizeOf(Sei);
Sei.fMask := SEE_MASK_DOENVSUBST or SEE_MASK_FLAG_NO_UI or SEE_MASK_NOCLOSEPROCESS or
SEE_MASK_FLAG_DDEWAIT;
Sei.lpFile := PChar(FileName);
Sei.lpParameters := PCharOrNil(Parameters);
Sei.lpVerb := PCharOrNil(Verb);
Sei.nShow := CmdShow;
Result := ShellExecuteEx(@Sei);
if Result then
begin
WaitForInputIdle(Sei.hProcess, INFINITE);
while (WaitForSingleObject(Sei.hProcess, 10) = WAIT_TIMEOUT) do
begin
repeat
Res := PeekMessage(Msg, Sei.Wnd, 0, 0, PM_REMOVE);
if Res then
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
until (Res = False);
end;
CloseHandle(Sei.hProcess);
end;
end;


 
tipman ©   (2003-06-28 21:19) [2]

а слабо тоже самое но не с ShellExecuteEx, а ShellExecute? (дабы не переделывать прогу!) и вообще как можно получить hProcess, если я даже не сам запускаю программу, а она запускается каким-либо другим образом?


 
Songq   (2003-06-28 22:47) [3]

С ShellExecute() слабо. Можешь использовать ShellExecuteEx()


 
Ян   (2003-06-30 13:43) [4]

через CreateProcess гораздо проще
var
x:TProcessInformation;
s:TStartupInfo;
i:boolean;
WinHandle,MnuHandle,SubMnuHandle:HWND;
MnuID:integer;
begin
ZeroMemory(@s,sizeof(s));
s.cb:=sizeof(s);
s.wShowWindow:=SW_SHOWNORMAL;
s.dwFlags:=STARTF_USESHOWWINDOW;
i:=createprocess(
имя проги,
nil,
nil,
nil,
false,
CREATE_DEFAULT_ERROR_MODE + NORMAL_PRIORITY_CLASS,
nil,
nil,
s,
( x.hProcess, INFINITE) через CreateProcess гораздо проще
var
x:TProcessInformation;
s:TStartupInfo;
i:boolean;
WinHandle,MnuHandle,SubMnuHandle:HWND;
MnuID:integer;
begin
ZeroMemory(@s,sizeof(s));
s.cb:=sizeof(s);
s.wShowWindow:=SW_SHOWNORMAL;
s.dwFlags:=STARTF_USESHOWWINDOW;
i:=createprocess(
имя проги,
nil,
nil,
nil,
false,
CREATE_DEFAULT_ERROR_MODE + NORMAL_PRIORITY_CLASS,
nil,
nil,
s,
x);
WaitForInputIdle(x.hProcess, INFINITE);
Win32Check(CloseHandle(x.hProcess));



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

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

Наверх




Память: 0.48 MB
Время: 0.023 c
6-1540
Oleg__
2003-06-11 10:23
2003.09.01
RasGetEntryDialParams


1-1417
DelphiNew
2003-08-19 15:51
2003.09.01
Печать


1-1505
Злодей
2003-08-17 20:27
2003.09.01
Пуск


1-1493
n-m-a
2003-08-18 09:37
2003.09.01
Я извеняюсь за свой может глупый вопрос, но можно ли узнать


1-1473
LuLu
2003-08-18 14:04
2003.09.01
изменение формы