AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi ShellExecute öffnet nicht alle Dateien?
Thema durchsuchen
Ansicht
Themen-Optionen

ShellExecute öffnet nicht alle Dateien?

Ein Thema von Hedge · begonnen am 20. Jun 2009 · letzter Beitrag vom 22. Jun 2009
Antwort Antwort
Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#1

ShellExecute öffnet nicht alle Dateien?

  Alt 20. Jun 2009, 12:51
Ich möchte mit ShellExecute beliebige Dateien mit ihrem Standardprogramm öffnen.
Das funktioniert leider nicht bei allen.
Musikdateien und Bilder wollen zB. nicht.

So benutze ich ShellExecute:

Delphi-Quellcode:
//Parameter auswerten
if (ParamStr(1)<>'') then
  ShellExecute(Application.Handle,
               'open',
               PChar(ParamStr(1)),
               nil,
               nil,
               1)
٩๏̯͡๏)۶
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: ShellExecute öffnet nicht alle Dateien?

  Alt 20. Jun 2009, 12:58
Mit welchem Programm sind die dateien verknüpft? Öffnet sich das verknüpfte Programm, wenn man sie im Expolrer doppelt anklickt? Für was steht die 1? Warum nimmst du dort keine Konstante, wie SW_SHOW? Was sagt der Rückgabewert von MSDN-Library durchsuchenShellexecute?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#3

Re: ShellExecute öffnet nicht alle Dateien?

  Alt 20. Jun 2009, 13:13
Ich war mal wieder zu voreilig.

Der Rückgabewert war 2, also "Datei nicht gefunden"
Ich hab mir dann mal angesehen welcher Dateiname als Parameter übergeben wird und festgestellt, dass der String abgeschnitten war beim Leerzeichen.

Beim Hinterlegen hab ich jetzt den Param-Str in Anführungszeichen gesetzt und voilá...es funktioniert

Ich verwende keine Konstante, weil das ShellExecute in der Project-Datei ausgeführt wird und ich so in der uses-Klausel extra Windows reinpacken müsste.
Weiß zwar nicht ob das dann nachher nen Unterschied macht, aber 1 ist ja das Äquivalent von SW_SHOWNORMAL.

Jetzt sieht der Aufruf so aus:

Delphi-Quellcode:
ShellExecute(Application.Handle,
             'open',
             PChar(ParamStr(1)),
             nil,
             PChar(ExtractFilepath(ParamStr(1))),
             5);
٩๏̯͡๏)۶
  Mit Zitat antworten Zitat
Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#4

Re: ShellExecute öffnet nicht alle Dateien?

  Alt 20. Jun 2009, 17:12
Ah Mist, jetzt hab ich doch noch einen Fehler gefunden:

Wenn Dateien die mit dem VLC-Player verknüpft sind geöffnet werden soll tritt Fehler 31 auf (SE_ERR_NOASSOC).
Im Explorer kann ich aber ganz normal auf die Datei doppelklicken und auch im Run-Dialog funktioniert es.

Was läuft da verkehrt?
٩๏̯͡๏)۶
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: ShellExecute öffnet nicht alle Dateien?

  Alt 21. Jun 2009, 18:29
Zitat von Hedge:
Ich verwende keine Konstante, weil das ShellExecute in der Project-Datei ausgeführt wird und ich so in der uses-Klausel extra Windows reinpacken müsste.
Der Compiler kompiliert nur das in die Exe, was auch gebraucht wird bzw. das, was im Init-abschnitt der Unit steht. Aber auch wenn du die Unit Windows.pas nicht verwenden willst, dann definier dir wemfalls die Konstante selbst, das erhöht die Lesbarkeit.

Warum sich die VLC-Dateien mit Shellexecute nicht öffnen lassen, kann ich dir leider auch nicht sagen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#6

Re: ShellExecute öffnet nicht alle Dateien?

  Alt 21. Jun 2009, 19:25
Zitat:
Der Compiler kompiliert nur das in die Exe, was auch gebraucht wird bzw. das, was im Init-abschnitt der Unit steht. Aber auch wenn du die Unit Windows.pas nicht verwenden willst, dann definier dir wemfalls die Konstante selbst, das erhöht die Lesbarkeit.
Lesbarkeit uiuiui...nächstes Thema

Danke für den Hinweis mit dem Compiler, wieder was dazu gelernt.

Das Problem mit dem VLC-Player konnte ich gerade lösen indem ich ShellExecute nicht mit 'open' sonder mit nil aufrufe.
In dem Fall benutzt er die Standard-Aktion aus der Registry und erst wenn keine definiert ist Open
٩๏̯͡๏)۶
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: ShellExecute öffnet nicht alle Dateien?

  Alt 22. Jun 2009, 07:40
Zitat von Luckie:
Aber auch wenn du die Unit Windows.pas nicht verwenden willst, ...
Verwendet wird Windows.pas auf jeden Fall, da diese in der Uses-Anweisung von ShellApi.pas steht.
Windows Vista - Eine neue Erfahrung in Fehlern.
  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 16:27 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