![]() |
Problem mit ShellExecute und .pdf Dateien
Mit
Delphi-Quellcode:
will ich die Datei 'Test.pfd' anzeigen lassen.
ShellExecute(Handle,'open','Test.pdf',nil,nil,SW_SHOWNORMAL);
Das hat früher gut funktioniert, seit einiger Zeit (nachdem ich Nuance PDF Converter installierte) funktioniert das nicht mehr. Die Datei wird nicht angezeigt, ShellExecute gibt als Resultat SE_ERR_NOASSOC zurück, was besagt "There is no application associated with the given file name extension." In der Systemsteuerung ist festgelegt, dass .pdf Dateien immer mit dem Adobe Reader geöffnet werden sollen. In den Datei-Eigenschaften von 'Test.pfd' steht ebenfalls "Öffnen mit Adobe Reader". Im Windows-Explorer wird bei Doppelklick auf die Datei diese korrekt mit dem Adobe Reader geöffnet. Probeweise habe ich in der Systemsteuerung festgelegt, dass sie mit Adobe Photoshop Elements 10 geöffnet werden sollen. Das ShellExecute öffnete dann die Datei mit Photoshop. Danach habe in der Systemsteuerung wieder Adobe Reader für .pdf Dateien festgelegt. ShellExecute lieferte dann wieder den Fehlercode SE_ERR_NOASSOC. Weiß jemand, wie ich das Problem lösen kann? |
AW: Problem mit ShellExecute und .pdf Dateien
Da bleibt eigentlich, wie an viele Stellen, nur selbst nachschauen. Sprich Process Monitor anschalten und schauen was nach dem Ausführen von ShellExecute passiert. Da werden Registry-Einträge gelesen usw., und einer davon wird einen unpassenden Wert haben.
Unter HKEY_CLASSES_ROOT einmal die Standardschlüssel für die Dateierweiterung manuell prüfen kann auch schon helfen. |
AW: Problem mit ShellExecute und .pdf Dateien
Zitat:
Zitat:
|
AW: Problem mit ShellExecute und .pdf Dateien
@himitsu:
Nein, natürlich nicht als relativer Pfad. Der Dateiname wird vorher mit FullPath('Test.pdf') erweitert. Ich wollte die Fragestellung nicht weiter komplizieren.
Delphi-Quellcode:
FUNCTION FullPath(const Dsn:String):String;
begin Result:=ExtractFilePath(ParamStr(0))+Dsn; end; |
AW: Problem mit ShellExecute und .pdf Dateien
Ähhh ganz simple Idee - Du hast in dem ersten Beitrag mehrmals pfd statt pdf verwendet - vielleicht auf deinem Rechner auch?
|
AW: Problem mit ShellExecute und .pdf Dateien
Zitat:
Aber: Nein, im Programm ist das schon korrekt. Und: Dann würde ShellExecute nicht SE_ERR_NOASSOC zurückgeben sondern ERROR_FILE_NOT_FOUND, es sei denn, auch eine Test.pfd wäre vorhanden. Trotzdem Danke für den Hinweis. |
AW: Problem mit ShellExecute und .pdf Dateien
Problem gelöst!
Ich habe den Nuance PDF Converter deinstalliert. Nach mehrfachem ändern des .pdf zugeordneten Programms funktioniert das Öffnen mit ShellExcute jetzt. |
AW: Problem mit ShellExecute und .pdf Dateien
Es gibt mehrere Möglichkeiten, ein PDF zu öffnen:
Mit der Übergabe des Parameters open wird die Anwendung gestartet, die unter shell/open/command bzw. shell/read/command steht. Beispiel: [HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Explorer\FileExts\.pdf\UserChoice] "ProgId"="FoxitReader.Document" Mit nil wird die ![]() Diese können identisch sein.
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var fn : String; begin fn:=ExtractFilePath(ParamStr(0)) +'test-1.pdf'; ShellExecute(0,nil,PChar(fn),NIL,NIL,SW_SHOWNORMAL); end; procedure TForm1.Button4Click(Sender: TObject); var fn : String; begin fn:=ExtractFilePath(ParamStr(0)) +'test-1.pdf'; ShellExecute(0,PChar('OPEN'),PChar(fn),NIL,NIL,SW_SHOWNORMAL); end; procedure TForm1.Button5Click(Sender: TObject); var fn : String; begin fn:=ExtractFilePath(ParamStr(0)) +'test-1.pdf'; webbrowser1.Navigate(fn); end; procedure TForm1.Button6Click(Sender: TObject); var fn : String; begin fn:=ExtractFilePath(ParamStr(0)) +'test-1.pdf'; ShellExecute(0,PChar('Foxit Reader.exe'),PChar(fn),NIL,NIL,SW_SHOWNORMAL); end; //AcroRd32.exe procedure TForm1.Button7Click(Sender: TObject); var fn : String; begin fn:=ExtractFilePath(ParamStr(0)) +'test-1.pdf'; ShellExecute(0, 'open','acrord32', PChar(fn),NIL,SW_SHOWNORMAL); end; procedure TForm1.Button9Click(Sender: TObject); //PRINT var fn : String; begin fn:=ExtractFilePath(ParamStr(0)) +'test-1.pdf'; ShellExecute(0, 'open','acrord32', PChar('/p /h ' + fn), nil, SW_HIDE); end; ![]() Open a PDF file: AcroRd32.exe PdfFile Open a PDF file in a new instance of Adobe Reader: AcroRd32.exe /N PdfFile Open a PDF file at page 7: AcroRd32.exe /A "page=7=OpenActions" PdfFile Open a PDF file with navigation pane active, zoom out to 50%, and search for and highlight the word "batch": AcroRd32.exe /A "zoom=50&navpanes=1=OpenActions&search=batch" PdfFile Print a PDF file with dialog: AcroRd32.exe /P PdfFile Print a PDF file silently: AcroRd32.exe /N /T PdfFile PrinterName [ PrinterDriver [ PrinterPort ] ] |
AW: Problem mit ShellExecute und .pdf Dateien
Mit nil wird nicht die Standardanwedung(?) gestartet, sondern die Standardaktion (so vorhanden) ausgeführt.
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz