![]() |
Autom. Dateiöffnen scheitert an Leerzeichen trotz "%1&q
Hi, sorry dass ich schon wieder was frage, aber beim letzten Überarbeiten des Programms fallen mir lauter Schwächen auf, mit denen ich gar nicht gerechnet habe.
Ich hoffe allerdings, das war erstmal die letzte dumme Frage. Mein Problem ist folgendes. Ich möchte per Windows meinen eigenen Dateityp automatisch per ParamStr(1) öffnen lassen. Klappt auch normalerweise aber gerade bemerke ich, dass es nicht klappt, wenn Leerzeichen im Dateinamen (oder den Ordnernamen, wie in meinem akuten Fall) sind. Schon klar, Parameter gehen nur bis zum Leerzeichen. Aber ich habe meine Dateiendung korrekt mit "%1" statt nur %1 registriert. Sämtliche Foren geben, soweit ich sehen konnte, immer nur die fehlenden Anführungszeichen als Fehlerquelle an. Ich stehe vor einem Rätsel. Die Registrierungszeile lautet:
Delphi-Quellcode:
Ich verwende XP, wenn das irgendeinen Unterschied machen sollte.
InstallExt('bst', 'BLE', 'Bestellliste', ParamStr(0), '"%1"',1)
Danke für die Hilfe! EDIT: Interessante Bemerkung: Wenn ich per "Ausführen" den Namen meines Programms angebe und in "..." den Dateinamen anhänge (also so, wie es eigentlich sein sollte!), funktioniert es trotz Leerzeichen. Also muss wohl irgendwas mit dem Registrieren falsch laufen. Ich sehe aber trotzdem nich, was. EDIT2: Folgende Überlegung: Da mein Programm-Ordner ebenfalls Leerzeichen enthält, wird er beim Öffnen dann selbst in Anführungszeichen gesetzt? So dass sich z.B.: "C:\Programm Ordner\Programm Name.exe *" wenn man an die Position des Sternchens den ebenfalls eingehakten Dateinamen setzt, folgendes rauskommt: "C:\Programm Ordner\Programm Name.exe "C:\Datei Ordner\Datei Name.bst"" ergibt, so dass die Aufteilung ergibt: 1. "C:\Programm Ordner\Programm Name.exe " 2. C:\Datei Ordner\Datei Name.bst 3. "" Also durch die doppelten Anführungszeichen der Dateiname ausgeklammert, statt eingeklammert, wird? Wenn ja, gibt es Auswege oder eine Möglichkeit, zu testen obs daran überhaupt liegt? |
Re: Autom. Dateiöffnen scheitert an Leerzeichen trotz "
Moin JayRZay,
wie sieht denn InstallExt aus? |
Re: Autom. Dateiöffnen scheitert an Leerzeichen trotz "
Ich Depp. Entschuldigung. Das hätte ich vielleicht mal erwähnen sollen.
Delphi-Quellcode:
function InstallExt(Extension, ExtDescription, FileDescription,
OpenWith, ParamString: string; IconIndex: Integer = 0): Boolean; var Reg: TRegistry; begin Result := False; if Extension <> '' then begin if Extension[1] <> '.' then Extension := '.' + Extension; Reg := TRegistry.Create; try Reg.RootKey := HKEY_CLASSES_ROOT; if Reg.OpenKey(Extension, True) then begin Reg.WriteString('', ExtDescription); if Reg.OpenKey('\' + ExtDescription, True) then begin Reg.WriteString('', FileDescription); if Reg.OpenKey('DefaultIcon', True) then begin Reg.WriteString('', Format('%s,%d', [OpenWith, IconIndex])); if Reg.OpenKey('\' + ExtDescription + '\Shell\Open\Command', True) then begin Reg.WriteString('', Format('"%s" "%s"', [OpenWith, ParamString])); Result:=True; end; end; end; end; finally Reg.Free; end; end; end; |
Re: Autom. Dateiöffnen scheitert an Leerzeichen trotz "
Moin JayRZay,
da ParamString schon von der Funktion in "" eingeschlossen werden, solltest Du das beim Aufruf der Funktion weglassen. BTW: TRegistry.Free führt zwar auch ein Close aus, aber eben nur eines. Es werden aber mehrere Keys geöffnet... Ausserdem fehlen, deshalb, dort noch so einige try/finally-Blöcke, um das Schliessen der Keys sicherzustellen. |
Re: Autom. Dateiöffnen scheitert an Leerzeichen trotz "
durch openkey wird automatisch ein CloseKey durchgeführt.
|
Re: Autom. Dateiöffnen scheitert an Leerzeichen trotz "
Peinlich, die Lösung ist vollkommen richtig. :oops: Ich danke dir, Seehase. Hat mir sehr geholfen!
Was das Schließen von Keys beim Öffnen eines Anderen angeht, hat SirThornberry allerdings recht. :wink: |
Re: Autom. Dateiöffnen scheitert an Leerzeichen trotz "
Moin Jens,
Zitat:
Ich habe das vorher bei D7 nachgesehen, da wird bei OpenKey kein CloseKey durchgeführt. Da D2006 die gleiche Routine verwendet gehe ich mal davon aus, dass es bei den dazwischenliegenden Versionen auch nicht gemacht wird. |
Re: Autom. Dateiöffnen scheitert an Leerzeichen trotz "
Hallo,
die D7 Online-Hilfe ist da wie so oft etwas missverständlich. Das regelmäßige automatische Schließen offener Schlüssel betrifft nur TRegIniFile, nicht TRegistry. Bei den Methoden von TRegistry wird ein CloseKey nur dann ausgeführt, wenn es der VCL-Code erfordert oder sinnvoll erscheinen lässt, nicht als Komfortmerkmal für den Programmierer. Deshalb gehört hinter jedes WriteString() ein CloseKey(). Besser ist das. Freundliche Grüße |
Re: Autom. Dateiöffnen scheitert an Leerzeichen trotz "
Moin Marabu,
Zitat:
In der englischen Fassung ist bei OpenKey nicht die Rede davon, dass ein geöffneter Key geschlossen wird... |
Re: Autom. Dateiöffnen scheitert an Leerzeichen trotz "
Moin Chris,
im Topic "TRegistry.CloseKey" findet sich folgende Beschreibung: Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:59 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