| 
| 
 | Вопрос # 666/ вопрос открыт / | 
 |  Здравствуйте, уважаемые эксперты!
 Каким образом узнать завершилось ли другое приложение, которое я запускаю через WinExec?
 
|  |   Вопрос задал: Фамилия Имя Отчество (статус: Посетитель)Вопрос отправлен: 24 июня 2007, 18:47
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Градов Ю.М. Здравствуйте, Emfs!Код в приложении:
 WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
 
 лучше написать:
 
 while WaitforSingleObject(ProcessInfo.hProcess,200)=WAIT_TIMEOUT do
 Repaint;
 Приложение:Переключить в обычный режим function WinExecAndWait32(FileName: string; Visibility: integer): integer;var  zAppName: array[0..512] of char;  zCurDir: array[0..255] of char;  WorkDir: string;  StartupInfo: TStartupInfo;  ProcessInfo: TProcessInformation;begin  StrPCopy(zAppName, FileName);  GetDir(0, WorkDir);  StrPCopy(zCurDir, WorkDir);  FillChar(StartupInfo, Sizeof(StartupInfo), #0);  StartupInfo.cb := Sizeof(StartupInfo);   StartupInfo.dwFlags := STARTF_USESHOWWINDOW;  StartupInfo.wShowWindow := Visibility;  if not CreateProcess(nil,         NORMAL_PRIORITY_CLASS,       ProcessInfo) then    else  begin    WaitforSingleObject(ProcessInfo.hProcess, INFINITE);    GetExitCodeProcess(ProcessInfo.hProcess, Result);  end;end;  
|  | Ответ отправил: Градов Ю.М. (статус: 8-ой класс)Время отправки: 24 июня 2007, 19:08
 Оценка за ответ: 5
 |  
 Мини-форум вопросаВсего сообщений: 4; последнее сообщение — 25 июня 2007, 06:41; участников в обсуждении: 2. 
|   | Фамилия Имя Отчество (статус: Посетитель), 24 июня 2007, 19:20 [#1]:Добавление этой функции выдает ошибку при компиляции:
 
 на строчке
 GetExitCodeProcess(ProcessInfo.hProcess, Result);
 
 ошибка:
 types of actual and format var parameters must be identical
 |  
|   | Градов Ю.М. (статус: 8-ой класс), 24 июня 2007, 19:46 [#2]:Попробуйте это, а я разберусь с ошибкой: uses Wintypes, WinProcs, Toolhelp, Classes, Forms;
 
 function WinExecAndWait(Path: string; Visibility: word): word;
 var
 InstanceID: THandle;
 PathLen: integer;
 begin
 { Преобразуем строку в тип PChar }
 
 PathLen := Length(Path);
 Move(Path[1], Path[0], PathLen);
 Path[PathLen] := #00;
 { Пытаемся запустить приложение }
 
 InstanceID := WinExec(@Path, Visibility);
 if InstanceID < 32 then { значение меньше 32 указывает на ошибку приложения }
 WinExecAndWait := InstanceID
 
 else
 begin
 repeat
 Application.ProcessMessages;
 until Application.Terminated or (GetModuleUsage(InstanceID) = 0);
 WinExecAndWait := 32;
 end;
 end;
 |  
|   | Градов Ю.М. (статус: 8-ой класс), 24 июня 2007, 21:38 [#3]:Исправьте: var
 zAppName: array[0..512] of char;
 zCurDir: array[0..255] of char;
 WorkDir: string;
 StartupInfo: TStartupInfo;
 ProcessInfo: TProcessInformation;
 ExitCode: DWORD;
 
 ........
 else
 begin
 WaitforSingleObject(ProcessInfo.hProcess, INFINITE);
 GetExitCodeProcess(ProcessInfo.hProcess, ExitCode);
 end;
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |