| Цитата | а как приостановить выполнение основной программы (на дельфи) на время работы запущенной?
|
| Код | var codeexec:integer//Код выхода программы
Function Exec(Path,Params,WorkPath:string; Wait:Boolean; Runmode:integer):boolean; { Выполняет указанную программу с ожиданием ее завершения Path - полный путь доступа к файлу. Params - параметры WorkPath - текущий каталог. Если '' то тот же каталог где EXE Wait - ждать завершения программы ? RUNMODE - режим запуска (0 - по умолчанию SHOWNORMAL): SW_HIDE Прячет окно и активизирует другое окно. SW_MAXIMIZE Maximizes window. SW_MINIMIZE Минимизирует определенное окно и активизирует следующее. SW_RESTORE В нормальном окне SW_SHOW Активирует окно в его текущем положении и размере SW_SHOWDEFAULT Делает текущее положение нормальным ? SW_SHOWMAXIMIZED Активизирует окно и расширяет его. SW_SHOWMINIMIZED Активизирует окно и минимизирует его. SW_SHOWMINNOACTIVE Минимизирует окно оставляя его активным. SW_SHOWNA Отображает окно в своем текущем состоянии. Активное окно остается активным. SW_SHOWNOACTIVATE Отображает окно в своем последнем размере и позиции. Активное окно остается активным. SW_SHOWNORMAL Активизирует и отображает окно. Если окно минимизируется или расширяется, то Окно восстанавливается в своем исходном размере и позиции. Приложение должно определить этот флаг отображая окно в начале.
Function Exec(Path,Params,WorkPath:string; Wait:Boolean; Runmode:integer):boolean; var startUpInfo : TStartupInfo; processInfo : TProcessInformation; exeCmd : string; begin CodeExec:=0; result:=true; if Runmode=0 then Runmode:=SW_SHOWNORMAL; if WorkPath='' then WorkPath:=extractfilepath(path); if wait then begin if not FileExists(path) then begin result := false; exit; end; exeCmd := path + ' ' + params; FillChar(startUpInfo, SizeOf(startUpInfo), Chr(0)); StartUpInfo.cb := SizeOf( StartUpInfo ); StartUpInfo.dwFlags := STARTF_USESHOWWINDOW; StartUpInfo.wShowWindow := runmode; if not CreateProcess( nil, PChar(exeCmd), nil, nil, false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, PChar(ExtractFilePath(path)), startUpInfo, processInfo) then result := false; WaitForSingleObject(processInfo.hProcess, INFINITE); GetExitCodeProcess(processInfo.hProcess, CodeExec); end else result:=ShellExecute(Application.Handle,'open',pchar(path),pchar(params), pchar(WorkPath),RunMode)>32; end;
//если параметр wait установить в TRUE то ваша программа будет ждать завершения работы внешней программы.
|
|