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

Вниз

Как подождать завершения приложения   Найти похожие ветки 

 
lhs7fy   (2004-01-16 12:47) [0]

Помогите разобраться!
Допустим моя программа запускает с помощью функции
ShellExecute какое-нибудь приложение, как сделать так,
чтобы моя програ ещё и подождала завершения выполнения
этого приложения?


 
Serge ©   (2004-01-16 13:11) [1]

Поищи инфу насчет
CreateProcess


 
Digitman ©   (2004-01-16 13:34) [2]


> lhs7fy


вместо ShellExecute используй ShellExecuteEx
последняя в составе структуры SHELLEXECUTEINFO возвратит тебе хэндл созданного процесса. который ты можешь использовать в кач-ве хендла объекта синхронизации любой из WairFor-семейства функций, ожидающих наступление событий

следует лишь принять во внимание комментарий к полю hProcess в составе структуры SHELLEXECUTEINFO :

hProcess

Handle to the newly started application. This member is set on return and is always NULL if fMask is not set to SEE_MASK_NOCLOSEPROCESS


 
Rext   (2004-01-16 15:17) [3]

Попробуй так:
.
.
var si : StartUpInfo;
   pi : Process_Information;
   PathStr : string;
.
.
.
ZeroMemory(@si,SizeOf(si));
si.cb:=SizeOf(si);
if not CreateProcess(nil,PChar(PathStr),nil,nil,false,0,nil,nil,si,pi) then
begin
  MessageDlg("Ошибка запуска файла"+PathStr,mtError,[mbOk],0);
  exit;
end;
WaitForSingleObject(pi.hProcess,Infinite);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
.
.
.

У меня в проге это работает.

Удачи.


 
Edward   (2004-01-16 15:41) [4]


//----------------------------------------------------------------------------
//Запуск внешних программ
// APath: командная строка
// Mode:  режим запуска: SW_SHOWNORMAL,
//                       SW_SHOWMINIMIZED,
//                       SW_SHOWMAXIMIZED,
//                       SW_HIDE
// Wait:  0 - не ждать завершения процесса (по умолчанию),
//        1 - ждать завершения процесса,
// Возвращаемое значение: при Wait = 0, возвращает:
//                                  -1  - ошибка запуска,
//                                   0  - процесс запущен
//                        при Wait = 1, возвращает:
//                                  -1  - ошибка запуска,
//                                   Код завершения (определяется программой,
//                                                   которая запускается)
//----------------------------------------------------------------------------
function TMainForm.iWinExecute(APath: String; Mode, Wait: Integer): Integer;
var lpProcessInformation: TProcessInformation;
   P: array[0..254] of Char;
   lpStartupInfo: TStartupInfo;
   R: LPDWORD;
begin
 Result := -1;
 FillChar(lpStartupInfo, SizeOf(TStartupInfo), $00);
 with lpStartupInfo do
   begin
     lpDesktop   := nil;
     lpTitle     := nil;
     dwFlags     := STARTF_USESHOWWINDOW;
     wShowWindow := Mode;
  end;
  FillChar(P, SizeOf(P), $00);
  StrPCopy(P, APath);
  if CreateProcess(nil, P, nil, nil, False, CREATE_DEFAULT_ERROR_MODE, nil,
                   nil, lpStartupInfo, lpProcessInformation) then
    begin
      if Wait = 1 then
        begin
          WaitForSingleObject(lpProcessInformation.hProcess, INFINITE);
          Result:= lpProcessInformation.hProcess;
          New(R);
          if GetExitCodeProcess(lpProcessInformation.hProcess, R^) then Result:= R^;
          CloseHandle(lpProcessInformation.hProcess);
        end
    else
      Result:= 0;
    end;
end;



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

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

Наверх




Память: 0.48 MB
Время: 0.045 c
1-1079528045
Andrey_ck
2004-03-17 15:54
2004.04.04
Работа со строками


3-1078938139
Крутыш
2004-03-10 20:02
2004.04.04
Поиск в базе


3-1078379359
Vemer
2004-03-04 08:49
2004.04.04
Обновление вычисляемого поля...


6-1074956009
aser
2004-01-24 17:53
2004.04.04
Конект по диалапу на комп. без сетевой карты


3-1078121878
jenya_d
2004-03-01 09:17
2004.04.04
Компонент для закачки/обновления данных между таблицами IB