Delphi: Открыть Файл С Ожиданием Завершения Его Редактирования

  • Автор темы Автор темы Sascha
  • Дата начала Дата начала

Sascha

Команда форума
Администратор
Ofline
Функция позволяет открыть файл в приложении, ассоциированном с его расширением, и дождаться завершения редактирования.

Код:
uses Shellapi;
...
function StartAssociatedExe(ExFName: WideString; var ErrorCode: Cardinal): Boolean;
var Prg: WideString;
    ProcessInfo: TProcessInformation;
    StartupInfo: TStartupInfo;
begin
  SetLength(Prg, MAX_PATH);
  Result := False;
  ErrorCode := FindExecutable(PChar(ExFName), 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(nil, PWideChar(Format('%s "%s"', [Prg, ExFName])),
      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;
Пример использования:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var ErrorCode: Cardinal;
begin
  StartAssociatedExe('c:\test.doc', ErrorCode);
end;
 
Назад
Сверху Снизу