Einzelnen Beitrag anzeigen

Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 

Dateien und Anwendungen aus Delphi heraus starten

  Alt 27. Dez 2005, 17:36
Moin,

mit folgendem Code lässt sich so ziemlich jede mit einer Anwendung verknüpfte Datei oder eine Anwendung selbst aus Delphi heraus starten, zumindest ist mir keine bekannt, die man so nicht starten kann. Jetzt denkt ihr sicher, wieso soll ich kein Delphi-Referenz durchsuchenShellExecute nutzen, das kann doch das gleiche. Nunja, nein, nicht immer, was mit schier den letzten Nerv geraubt hätte, als ich eine PDF-Datei öffnen wollte.

Entdeckt habe ich den Code hier.

Delphi-Quellcode:
uses
  ShellAPI;

  //...

function ExecuteProgramm(const PFileName: string): Boolean;
var
  SEInfo: TShellExecuteInfo;
  ExitCode: DWORD;
  ExecuteFile: string;
begin
  ExecuteFile := '"' + PFileName + '"';
  FillChar(SEInfo, SizeOf(SEInfo), 0);
  SEInfo.cbSize := SizeOf(TShellExecuteInfo);

  with SEInfo do
  begin
    fMask := SEE_MASK_NOCLOSEPROCESS;
    Wnd := Application.Handle;
    lpFile := PChar(ExecuteFile);
    nShow := SW_SHOWNORMAL;
  end;

  if ShellExecuteEx(@SEInfo) then
  begin
    repeat
      Application.ProcessMessages;
      GetExitCodeProcess(SEInfo.hProcess, ExitCode);
    until (ExitCode <> STILL_ACTIVE) or
      Application.Terminated;

    Result := true;
  end else
  begin
    Result := false;
  end;
end;
Der Vollständigkeit halber hier noch die kürzere Variante, die leider nicht immer so funktioniert, wie man es gerne hätte

Delphi-Quellcode:
uses
  ShellAPI;

  //...

function OpenFile(const FileName: string): Boolean;
begin
  Result := ShellExecute(Application.Handle, 'open', PChar('"' + FileName + '"'),
    nil, nil, SW_NORMAL) > 32;
end;
.

Geändert von Matze ( 3. Nov 2010 um 18:31 Uhr) Grund: Prozedur in eine Funktion umgewandelt
  Mit Zitat antworten Zitat