Главная страница
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.024 c
3-1078931930
ser k
2004-03-10 18:18
2004.04.04
как программно поменять поля местами


14-1078424512
Ангел.
2004-03-04 21:21
2004.04.04
Кто из Омска ?


3-1078216381
T{}r(l-l
2004-03-02 11:33
2004.04.04
Проблемы с ключами, таблицами


9-1060437914
Still_Swamp
2003-08-09 18:05
2004.04.04
Сфера случайных точек


14-1078694398
Игорь Шевченко
2004-03-08 00:19
2004.04.04
С праздником, милые дамы! :)