Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Открыть документ и дождаться завершения работы с ним

Delphi , Программа и Интерфейс , Приложения чужие

Открыть документ и дождаться завершения работы с ним

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{ 
  This tip allows you to open any document with its 
  associated application (not only exe, com) and wait for it to finish. 
}


 { 
  Dieser Tip ermцglicht es, nicht nur normale Programme, sondern auch Dateien, 
  die mit Programmen geцffnet werden, auszufьhren und darauf zu warten, 
  bis sie beendet sind. 
}

 uses
   Shellapi;

 function StartAssociatedExe(FileName: string; var ErrorCode: Cardinal): Boolean;
 var
   Prg: string;
   ProcessInfo: TProcessInformation;
   StartupInfo: TStartupInfo;
 begin
   SetLength(Prg, MAX_PATH);
   Result := False;
   ErrorCode := FindExecutable(PChar(FileName), nil, PChar(Prg));
   if ErrorCode >= 32 then
   begin
     SetLength(Prg, StrLen(PChar(Prg)));
     FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
     with StartupInfo do
     begin
       cb := SizeOf(TStartupInfo);
       wShowWindow := SW_SHOW;
     end;
     if CreateProcess(PChar(Prg), PChar(Format('%s %s', [Prg, FileName])),
       nil, nil, False, NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then
     begin
       WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
       GetExitCodeProcess(ProcessInfo.hProcess, ErrorCode);
       CloseHandle(ProcessInfo.hProcess);
       CloseHandle(ProcessInfo.hThread);
       Result := True;
     end
     else
       ErrorCode := GetLastError;
   end;
 end;

 // Example, Beispiel: 

procedure TForm1.Button1Click(Sender: TObject);
 var
   ErrorCode: Cardinal;
 begin
   StartAssociatedExe('c:\test.doc', ErrorCode);
 end;

Программный совет Delphi, который предлагает функцию StartAssociatedExe, открывающую любое документ с его связанным приложением (не только .exe или .com файлы) и ожидая его завершения.

Расшифровка кода:

  1. Клауза uses импортирует модуль Shellapi, который необходим для работы с оболочкой Windows.
  2. Функция StartAssociatedExe принимает два параметра: FileName (строка, представляющая имя файла) и ErrorCode (переменная для хранения кодов ошибок).
  3. Функция первым образом задает буфер (Prg) для хранения пути связанного исполняемого файла.
  4. Затем она вызывает функцию FindExecutable, чтобы найти путь связанного исполняемого файла, передавая в нее аргумент FileName. Если статус выполнения равен 0 (то есть ассоциация не была найдена), функция возвращает сразу с успешным значением (Result := False). В противном случае она задает Prg на путь и продолжает.
  5. Функция создает структуру TStartupInfo, чтобы хранить информацию о том, как процесс должен быть запущен. Она устанавливает поле wShowWindow в значение SW_SHOW, что significa, что окно будет отображаться при запуске процесса.
  6. Функция вызывает функцию CreateProcess, чтобы создать новый процесс с связанным исполняемым файлом и именем файла как аргументами. Если это succeeds, она ожидает завершения процесса с помощью WaitForSingleObject. Когда процесс завершается, она получает код выхода с помощью GetExitCodeProcess, закрывает handles и задает Result := True.
  7. Если CreateProcess fails (то есть возвращает False), функция задает ErrorCode на последний код ошибки с помощью GetLastError.

Пример процедуры Button1Click демонстрирует, как использовать эту функцию, вызывая StartAssociatedExe с именем файла ('c:\test.doc') и хранящим любые полученные коды ошибок в переменной ErrorCode.

Этот совет полезен для открытия файлов с их связанными приложениями и ожидания их завершения без блокировки основного потока.

Открыть документ и дождаться завершения работы с ним с помощью функции StartAssociatedExe, которая позволяет запустить ассоциированное приложение для документа и ожидать его закрытия.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Приложения чужие ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-28 06:08:47/0.0034470558166504/0