Entwickler-Ecke
Dateizugriff - PDF starten über function WinExecAndWait_32()
mjeheuer - So 28.01.07 15:58
Titel: PDF starten über function WinExecAndWait_32()
Hallo zusammen
Ich habe in der Vergangenheit immer wieder die Funktion WinExecAndWait_32 benutzt um aus Delphi heraus externe Programme zu starten. Das funktioniert auch fehlerfrei.
Was mir jetzt zum ersten mal auffällt ist, das es mir nicht gelingt ein PDF-File zu öffnen. Ich bin immer davon ausgegangen das wenn ich das PDF-File übergebe, der Acropbat Reader automatisch startet und das PDF-File dann anzeigt.
Hier passiert aber garnichts. Keine Fehlermeldung, kein PDF-File.
Habe ich da falsch gedacht, oder mache ich einen Fehler?
Wie kann ich, ohne den Pfad zum Acrobat Reader zu kennen, das PDF-File mit der Funktion öffnen?
Ich rufe die Funktion wie folgt auf: WinExecAndWait_32('Hilfe.pdf',1,false);
wobei die Hilfe.pdf im gleichen Verzeichnis ist wie mein Delphi-Programm.
Gruß
Michael
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
| function WinExecAndWait_32(FileName: string; Visibility: Integer; bWait: Boolean = False): Longword; var zAppName: array[0..512] of Char; zCurDir: array[0..255] of Char; WorkDir: string; StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; begin StrPCopy(zAppName, FileName); GetDir(0, WorkDir); StrPCopy(zCurDir, WorkDir); FillChar(StartupInfo, SizeOf(StartupInfo), #0); StartupInfo.cb := SizeOf(StartupInfo); StartupInfo.dwFlags := STARTF_USESHOWWINDOW; StartupInfo.wShowWindow := Visibility; if not CreateProcess(nil, zAppName, nil, nil, False, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then Result := WAIT_FAILED else begin if bWait then WaitForSingleObject(ProcessInfo.hProcess, INFINITE); GetExitCodeProcess(ProcessInfo.hProcess, Result); CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread); end; end; |
Roadrunner116 - So 28.01.07 20:01
hab d anicht so viel Ahnung von, aber ich öffne HTML-Seiten mit shellexecute, müsste mit pdf auch gehen!
Delphi-Quelltext
1: 2: 3: 4: 5:
| if ShellExecute(Application.Handle, 'open', PChar(), Nil, Nil, SW_NORMAL) <= 32 then ShowMessage('Es ist ein Fehler aufgetreten'); |
Gruß Jonas
mjeheuer - Mo 29.01.07 09:22
Roadrunner116 hat folgendes geschrieben: |
hab d anicht so viel Ahnung von, aber ich öffne HTML-Seiten mit shellexecute, müsste mit pdf auch gehen!
Delphi-Quelltext 1: 2: 3: 4: 5:
| if ShellExecute(Application.Handle, 'open', PChar(), Nil, Nil, SW_NORMAL) <= 32 then ShowMessage('Es ist ein Fehler aufgetreten'); |
Gruß Jonas |
Hallo Jonas
Danke für den Tip. Das funktioniert tatsächlich auch bei PDF-Dateien.
Trotzdem Schade das es scheinbar nicht mit der WinExecAndWait_32 funktioniert da ich die ohnehin schon in meinem Programm habe.
Gruß
Michael
ssb-blume - Sa 03.02.07 11:45
Muesste auch funzen, wenn im Betriebssystem die Dateierweiterung .pdf auf den Reader angemeldet ist.
Aber ich weiss nicht wie, kenne das nur bei NORTON, da gibst sowas..
Andererseits geht aber auch die Funktion
CreateProcess aus der API, siehe mal in der Hilfe nach, wie die Parameter aussehen.
Ein Beispiel fuer die Verwendung findest Du in meiner Unit hier im Forum:
[Delphi, Win32] Unit für allgem. Dateibehandlung
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!