Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi ShellExecute mit Leerzeichen (https://www.delphipraxis.net/213864-shellexecute-mit-leerzeichen.html)

H.Bothur 10. Okt 2023 11:59

ShellExecute mit Leerzeichen
 
Moin,

eigentlich ist mir ja klar wie es gehen sollte:

Ich habe einen Film unter

e:\Video\2 Serien\Friesland-03-Klootschiessen.mp4

der soll mit folgendem Sourcecode gestartet werden. Natürlich habe ich im Debugger mir den Inhalt von Filename angesehen, da steht der Name auch korrekt in Anführungszeichen. Macht PChar noch irgendwas aus den Tüttelchen ?

Der Film wird nicht abgespielt und es kommt als Fehlermeldung:

EOSError
Systemfehler. Code: 2
Das System kann die angegebene Datei nicht finden.



Gruss
Hans

Delphi-Quellcode:
procedure FilmAbspielen;
var
  Node: PVirtualNode;
  Data: PTreeData;
  FileName: String;
begin
  Node := SerienDB.VST.FocusedNode;
  if not Assigned(Node) then Exit;
  Data := SerienDB.VST.GetNodeData(Node);
  FileName := #34 +SerienDB.LbEVerzeichnis.Text +'\' +Data.FCaption +#34;
  if Data.FColumn5 = 'F' then
  begin
    ShellExecute(0, 'open', PChar(FileName), NIL, NIL, SW_SHOW);
    RaiseLastOSError;
  end;
end;

Achim Kalwa 10. Okt 2023 12:10

AW: ShellExecute mit Leerzeichen
 
Zitat:

Zitat von H.Bothur (Beitrag 1527906)
Moin,

eigentlich ist mir ja klar wie es gehen sollte:

Ich habe einen Film unter

e:\Video\2 Serien\Friesland-03-Klootschiessen.mp4

der soll mit folgendem Sourcecode gestartet werden. Natürlich habe ich im Debugger mir den Inhalt von Filename angesehen, da steht der Name auch korrekt in Anführungszeichen. Macht PChar noch irgendwas aus den Tüttelchen ?

Was passiert denn? Fehlermeldung?

H.Bothur 10. Okt 2023 12:15

AW: ShellExecute mit Leerzeichen
 
Zitat:

Zitat von Achim Kalwa (Beitrag 1527909)
Was passiert denn? Fehlermeldung?

Sorry - natürlich ...


der Film wird nicht abgespielt und es kommt als Fehlermeldung:

EOSError
Systemfehler. Code: 2
Das System kann die angegebene Datei nicht finden.

Gruss
Hans

Stolle58 10. Okt 2023 12:22

AW: ShellExecute mit Leerzeichen
 
Code:
Filename := SystUtils.QuotedStr(Filename)

Achim Kalwa 10. Okt 2023 12:25

AW: ShellExecute mit Leerzeichen
 
Zitat:

Zitat von H.Bothur (Beitrag 1527911)
der Film wird nicht abgespielt und es kommt als Fehlermeldung:

EOSError
Systemfehler. Code: 2
Das System kann die angegebene Datei nicht finden.

Falls einer der Teil-Strings bereits ein Anführungszeichen oder den Backslash enthält, könnte es zu einem Problem kommen. Versuche mal
Delphi-Quellcode:
  FileName := TPath.Combine(OrdnerName, DateiName); // uses System.IOUtils;
  if Pos(' ', FileName) > 0 then
    FileName := AnsiQuotedString(FileName, #34);
  ShellExecute(...

peterbelow 10. Okt 2023 12:28

AW: ShellExecute mit Leerzeichen
 
Zitat:

Zitat von H.Bothur (Beitrag 1527911)
Zitat:

Zitat von Achim Kalwa (Beitrag 1527909)
Was passiert denn? Fehlermeldung?

Sorry - natürlich ...


der Film wird nicht abgespielt und es kommt als Fehlermeldung:

EOSError
Systemfehler. Code: 2
Das System kann die angegebene Datei nicht finden.

Gruss
Hans

Der ganze Ansatz ist falsch. Einen Dateinamen in " einzuschließen erfordern nur die Kommandozeilen-Tools, für ShellExecute ist das nicht erlaubt.

H.Bothur 10. Okt 2023 12:39

AW: ShellExecute mit Leerzeichen
 
[QUOTE=Achim Kalwa;1527915]
Zitat:

Zitat von H.Bothur (Beitrag 1527911)
Falls einer der Teil-Strings bereits ein Anführungszeichen oder den Backslash enthält, könnte es zu einem Problem kommen. Versuche mal
Delphi-Quellcode:
  FileName := TPath.Combine(OrdnerName, DateiName); // uses System.IOUtils;
  if Pos(' ', FileName) > 0 then
    FileName := AnsiQuotedString(FileName, #34);
  ShellExecute(...

Ergibt in FileName das gleiche Ergebnis - und leider auch den gleichen Fehler :-(

Hans

H.Bothur 10. Okt 2023 12:40

AW: ShellExecute mit Leerzeichen
 
[QUOTE=peterbelow;1527917]
Zitat:

Zitat von H.Bothur (Beitrag 1527911)
Der ganze Ansatz ist falsch. Einen Dateinamen in " einzuschließen erfordern nur die Kommandozeilen-Tools, für ShellExecute ist das nicht erlaubt.

Aber ohne die " kommt auch dieser Fehler - was wäre denn besser ?

Hans

Achim Kalwa 10. Okt 2023 13:07

AW: ShellExecute mit Leerzeichen
 
Zitat:

Zitat von H.Bothur (Beitrag 1527919)
Ergibt in FileName das gleiche Ergebnis - und leider auch den gleichen Fehler :-(

Ob die Datei wirklich da ist und für das ausgeführte Programm erreichbar ist hast Du sicherlich schon überprüft (IDE läuft als Admin; E: ist ein Netzwerklaufwerk gemappt vom User usw.)

Kopiere doch mal beim Debuggen den Inhalt von FileName in die Zwischenablage, und verfüttere das an Windows Start -> Ausführen. Wenn da ebenfalls ein Fehler auftritt, dann gibt es die Datei wirklich nicht.

Ansonsten hilft jetzt nur noch die Glaskugel ;-)

dstein 10. Okt 2023 13:20

AW: ShellExecute mit Leerzeichen
 
evtl. hilft zusätzlich:

begin
if fileexist(FileName) then
begin
ShellExecute(0, 'open', PChar(FileName), NIL, NIL, SW_SHOW);
RaiseLastOSError;
end
else
... "irgend eine Antwort"..
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:24 Uhr.
Seite 1 von 3  1 23      

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