|
Вопрос # 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;
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|