AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Problem mit ShellExecute und .pdf Dateien
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit ShellExecute und .pdf Dateien

Ein Thema von Amateurprofi · begonnen am 25. Jan 2014 · letzter Beitrag vom 27. Jan 2014
Antwort Antwort
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.062 Beiträge
 
Delphi XE2 Professional
 
#1

Problem mit ShellExecute und .pdf Dateien

  Alt 25. Jan 2014, 18:53
Mit ShellExecute(Handle,'open','Test.pdf',nil,nil,SW_SHOWNORMAL); will ich die Datei 'Test.pfd' anzeigen lassen.

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?
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Problem mit ShellExecute und .pdf Dateien

  Alt 25. Jan 2014, 19:17
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#3

AW: Problem mit ShellExecute und .pdf Dateien

  Alt 25. Jan 2014, 20:06
Zitat:
will ich die Datei 'Test.pfd' anzeigen lassen.
Aber doch nicht etwa wirklich als relativen Pfad?

In den Datei-Eigenschaften von 'Test.pfd' steht ebenfalls "Öffnen mit Adobe Reader".
Eventuell dennoch nochmal über "Öffnen mit" das Standardprogramm "neu" auswählen, bzw. vorher nochmal kurz ein Anderes Programm auswählen, damit die Einträge neu erstellt werden.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.062 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Problem mit ShellExecute und .pdf Dateien

  Alt 26. Jan 2014, 03:14
@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;
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
schotti65

Registriert seit: 4. Sep 2010
Ort: Berlin
53 Beiträge
 
Delphi XE5 Enterprise
 
#5

AW: Problem mit ShellExecute und .pdf Dateien

  Alt 26. Jan 2014, 14:45
Ähhh ganz simple Idee - Du hast in dem ersten Beitrag mehrmals pfd statt pdf verwendet - vielleicht auf deinem Rechner auch?
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.062 Beiträge
 
Delphi XE2 Professional
 
#6

AW: Problem mit ShellExecute und .pdf Dateien

  Alt 26. Jan 2014, 18:47
Ähhh ganz simple Idee - Du hast in dem ersten Beitrag mehrmals pfd statt pdf verwendet - vielleicht auf deinem Rechner auch?
Oh, das ist mir jetzt etwas peinlich.
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.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.062 Beiträge
 
Delphi XE2 Professional
 
#7

AW: Problem mit ShellExecute und .pdf Dateien

  Alt 26. Jan 2014, 21:32
Problem gelöst!
Ich habe den Nuance PDF Converter deinstalliert.
Nach mehrfachem ändern des .pdf zugeordneten Programms funktioniert das Öffnen mit ShellExcute jetzt.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#8

AW: Problem mit ShellExecute und .pdf Dateien

  Alt 27. Jan 2014, 13:06
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 Standardanwendung gestartet.
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;
PARAMETER

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 ] ]

Geändert von hathor (27. Jan 2014 um 19:52 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#9

AW: Problem mit ShellExecute und .pdf Dateien

  Alt 27. Jan 2014, 13:33
Mit nil wird nicht die Standardanwedung(?) gestartet, sondern die Standardaktion (so vorhanden) ausgeführt.
Zitat:
lpOperation [in, optional]
...
NULL

The default verb is used, if available. If not, the "open" verb is used. If neither verb is available, the system uses the first verb listed in the registry.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz