Показать сообщение отдельно
  #8  
Старый 31.03.2010, 07:15
Soled Soled вне форума
Прохожий
 
Регистрация: 31.03.2010
Сообщения: 3
Репутация: 10
По умолчанию запустить внешнее приложение и подождать его завершения

ShellExecute(Handle,'open','Calc',nil,nil,SW_RESTO RE);
ShellExecute()

ShellExecuteEx()

WinExec()

CreateProcess()

LoadModule()

Зависимости: Требуется модуль ShellApi
Примеры:

ShellExecute(Handle,nil,'notepad.exe',nil,nil,SW_S HOWNORMAL);SW_HIDE

Последний параметр управляет видимостью и активностью запущенной программы на экране.
Через ShellExecute() также можно запускать ассоциированную с тем или иным файлом программу:

ShellExecute(Handle,'open','pd.doc',nil,nil,SW_SHO WNORMAL);
- запустит MS Word (или другую программу, ассоциироанную для запуска *.doc файлов) и загрузит в него файл pd.doc.

WinExec('notepad.exe',SW_SHOWNORMAL);

WinExec() легче в использовании, однако давно уже устарела и не рекомендуется к использованию, оставлена только в целях совместимости с 16-ти разрядными приложениями.



----------------------------------------------------------------------------
Вариант №2 через WaitForSingleObject
Код:
function ExecAndWait(const FileName, Params: ShortString; const WinState: Word): boolean; export; 
var 
  StartInfo: TStartupInfo; 
  ProcInfo: TProcessInformation; 
  CmdLine: ShortString; 
begin 
  { Помещаем имя файла между кавычками, с соблюдением всех пробелов в именах Win9x } 
  CmdLine := '"' + Filename + '" ' + Params; 
  FillChar(StartInfo, SizeOf(StartInfo), #0); 
  with StartInfo do 
  begin 
    cb := SizeOf(StartInfo); 
    dwFlags := STARTF_USESHOWWINDOW; 
    wShowWindow := WinState; 
  end; 
  Result := CreateProcess(nil, PChar( String( CmdLine ) ), nil, nil, false, 
                          CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, 
                          PChar(ExtractFilePath(Filename)),StartInfo,ProcInfo); 
  { Ожидаем завершения приложения } 
  if Result then 
  begin 
    WaitForSingleObject(ProcInfo.hProcess, INFINITE); 
    { Free the Handles } 
    CloseHandle(ProcInfo.hProcess); 
    CloseHandle(ProcInfo.hThread); 
  end; 
end; 


{
А вот пример вызова этой функции:

ExecAndWait( 'C:\windows\calc.exe', '', SH_SHOWNORMAL) 

Параметр FileName = Имя внешней программы. 
Параметр Params = Параметры, необходимые для запуска внешней программы
Параметр WinState = Указывает - как будет показано окно:
Для этого параметра мы можем так же использовать следующие константы: 
SW_HIDE, SW_MAXIMIZE, SW_MINIMIZE, SW_SHOWNORMAL 

PS: Этот код тестировался в delphi версий 3, 4 и 5.

}
Admin: Пользуемся тегами!
Ответить с цитированием