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
ShellExecute 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;
.