Главная страница
    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.01 c
7-1677
HellTrooper
2003-06-16 15:54
2003.09.01
При выключении компа...


7-1690
mod
2003-06-17 14:01
2003.09.01
Раскладка клавиатуры


6-1542
delphimun
2003-06-25 16:35
2003.09.01
Как из своей проги создать собственную учетную запись в Outlook-е


1-1384
frost
2003-08-16 12:57
2003.09.01
ComboBox как TreeView.


14-1594
Феликса
2003-08-13 21:38
2003.09.01
Как сделать redirect?





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