Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.09.01;
Скачать: [xml.tar.bz2];

Вниз

Где взять 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.09.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.012 c
1-1445
KreZ0n
2003-08-18 09:57
2003.09.01
Delphi 5 and Delphi6


14-1632
Zergling
2003-08-13 11:38
2003.09.01
А где орешник?


14-1558
sniknik
2003-08-11 22:59
2003.09.01
Linux C/C++ with IDE (???)


1-1444
Borealis
2003-08-18 18:10
2003.09.01
Позиция курсора в TEdit


3-1297
dito
2003-08-10 17:43
2003.09.01
Рисунки в Access с помощью ADO





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