Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   FindExecutable (https://www.delphipraxis.net/205517-findexecutable.html)

Willie1 18. Sep 2020 16:51

FindExecutable
 
Hallo,
beim Umstieg auf Delphi 10.x finde ich immer noch Fehler. Ich benutze FindExecutable, um aus meinem Programm heraus das Standartprogramm für JPG usw. auf zurufen. Bei Tif klappt das es gibt PhotoViewer.dll zurück bei Jpg Errorcode 31 nichts zugeordnet.
Sieht so aus:
Delphi-Quellcode:
    Prog:=StrAlloc(255);
    Er:=FindExecutable(PWideChar(ExtractFileName(fs)),PWideChar(ExtractFilePath(fs)), PWideChar(Prog));
    case Er of
      31: Result:='';
       0,
       ERROR_FILE_NOT_FOUND,
       ERROR_PATH_NOT_FOUND: Result:='Fehler';
      else
      Result:=Prog
    end;
Wenn es bei Tif geht, kann mein Funktionsaufruf nicht falsch sein. Willie.

Delphi.Narium 18. Sep 2020 17:28

AW: FindExecutable
 
https://docs.microsoft.com/en-us/win...indexecutablea

Da steht bei den Rückgabewerten, was die 31 bedeutet. Sollte man dann eventuell einfach auch als Rückgabewert liefern und nicht durch 'nen nichtssagenden Leerstring ersetzen.

Der schöne Günther 18. Sep 2020 17:48

AW: FindExecutable
 
Dass "31" "nicht zugeordnet" heißt, weiß er ja selbst. Seine Frage ist ja: "Weshalb meint diese Routine, es sei nichts zugeordnet? Wenn ich die Datei im Explorer doppelklicke wird sie doch von einem Programm geöffnet!"

PS: Mir ist deine String-Länge von 255 nicht ganz geheuer. Sie sollte MAX_PATH lang sein, und das ist 260 oder sowas...

Delphi.Narium 18. Sep 2020 18:17

AW: FindExecutable
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1473838)
Seine Frage ist ja: "Weshalb meint diese Routine, es sei nichts zugeordnet? Wenn ich die Datei im Explorer doppelklicke wird sie doch von einem Programm geöffnet!"

Davon kann ich nichts dem Eingangsthread entnehmen.

Da steht nichts davon, dass ein Doppelklick im Explorer funktioniert.

Da steht lediglich, dass für TIF die PhotoViewer.dll gefunden wird und für JPG kein Ergebnis geliefert wird, eben die 31, welche bedeutet, dass es nix zugeordnetes gibt.

Zur Überprüfung mache man halt im Explorer einen Doppelklick und teile das Ergebnis hier mit. Wenn's nicht funktioniert, dürfte die 31 stimmen.

Im Zweifelsfalle mal in der Registry nachschauen. Dateiendung .jpg und von dort dann, abhängig vom Inhalt der Einträge, weitersuchen.

Willie1 18. Sep 2020 18:43

AW: FindExecutable
 
Also Freunde,
FindExecute gibt bei Tif-Bildern PhotoViewer.dll zurück, bei Jpg-Bildern Errorcode 31 bedeutet nichts zugeordnet, was nicht stimmt Doppelklick. Ich könnte natürlich PhotoViewer.dll als Konstante eintragen aber ich denke, das ist keine stabile Lösung. Irgentwann wird Microsoft einen neuen Bilderviewer auf den Markt bringen.
Ich habe hier das Archiv angesehen und sehe, dass ich schonmal 2008 ähnlich gefragt habe, auch da gab es keine Lösung.
MAX_PATH ist ein richtiger Hinweis.
Willie.

himitsu 18. Sep 2020 19:03

AW: FindExecutable
 
Bei TIF/TIFF ist PhotoViewer.dll im \OpenWithList eingetragen.
Bei JPG/JPEG ist dieser Eintrag aber leer.

Das Öffnen im Explorer verwendet aber \Shell\Open, \ShellEx\Open und vieles Anderes.

FindExecutable nutzt also nicht die selben Einstellungen und liefert somit auch andere Ergebnisse.




Wenn es nur um das Öffnen von Dateien geht, warum übergibst du nicht einfach die Datei direkt an ShellExecute und lässt Dieses die Auswahl treffen?
Denn das nutzt die selben Funktionen, wie der Explorer, bzw. der Explorer nutzt wohl ShellExecute. :angle:

Außerdem hat der Explorer auch nochmal eigene Einstellungen, in einem eigenen Registryzweig, wo das gespeichert wird, was verwendet wurde, als der Nutzer im Explorer "Öffnen mit" aufrief.

Der schöne Günther 18. Sep 2020 20:08

AW: FindExecutable
 
Zitat:

Zitat von himitsu (Beitrag 1473841)
Wenn es nur um das Öffnen von Dateien geht, warum übergibst du nicht einfach die Datei direkt an ShellExecute und lässt Dieses die Auswahl treffen?

Das habe ich mich auch direkt gefragt, aber der gute Mann wird sicher seinen Grund haben...

mmw 19. Sep 2020 11:37

AW: FindExecutable
 
hallo,

bei Win10 soll das helfen

https://praxistipps.chip.de/windows-...so-gehts_42644

oder nach Photview enabler suchen.

auch ganz huebsch

https://www.chip.de/downloads/Honeyview_53821741.html

gruß

Willie1 19. Sep 2020 17:00

AW: FindExecutable
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1473846)
Zitat:

Zitat von himitsu (Beitrag 1473841)
Wenn es nur um das Öffnen von Dateien geht, warum übergibst du nicht einfach die Datei direkt an ShellExecute und lässt Dieses die Auswahl treffen?

Das habe ich mich auch direkt gefragt, aber der gute Mann wird sicher seinen Grund haben...

Der "gute Mann" will das so machen, gilt das für alle Formate, die GDI+ öffnen kann? Nur mal so gefragt, glaubt ihr, dass ein in Zukunft aktualisiertes GDI+ auch HEIf-Bilder öffnen kann?
Die alte Fotoanzeige öffnet bei mir im Explorer Tif-Bilder.
Danke und Gruß Willie.

mmw 19. Sep 2020 19:00

AW: FindExecutable
 
Liste der Anhänge anzeigen (Anzahl: 1)
hallo,

einmal diesen Registry Eintrag überprüfen

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Win dows Photo Viewer\Capabilities\FileAssociations

und wie in #8 Link 1 erweitern, falls erforderlich.

sollte wie im Anhang aussehen.

Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:31 Uhr.
Seite 1 von 2  1 2      

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