Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.035 c
14-1078670557
В л а д и м и р
2004-03-07 17:42
2004.04.04
Delphi 6 и Exel


1-1079676460
jens
2004-03-19 09:07
2004.04.04
Из Экселя в СтрингГрид


14-1078648724
juiceman
2004-03-07 11:38
2004.04.04
остановить сервис


6-1074777459
TCrash
2004-01-22 16:17
2004.04.04
Как привязать ServerSocket к определенному адресу


14-1078917811
Krotn
2004-03-10 14:23
2004.04.04
Характеристики Fm, TV, ИК волн.





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