Autor Beitrag
worm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 135


D6 Prof
BeitragVerfasst: Mo 22.05.06 23:51 
Hallo!

Ich bin gerade auf einen recht merkwürdigen Fehler gestoßen.
Und zwar benutze ich ShellExecute, um bestimmte Dateiordner zu öffnen. Nun ist mir aufgefallen, dass bestimmte Ordner nicht geöffnet wurden, ohne dass irgendeine Fehlermeldung ausgespuckt wurde.
Ein kleiner Test hat ergeben: Wann immer ich versuche, einen Ordner mit Komma im Namen per ShellExecute zu öffnen, liefert der Aufruf 33 zurück (wie sonst auch immer), ein neues Fenster erscheint jedoch nicht. :?!?:
Ich benutze ShellExecute so wie in der Dokumentation angegeben: ShellExecute(handle, NULL, path_to_folder, NULL, NULL, SW_SHOWNORMAL);
Den Pfad in Anführungszeichen einzuschließen ändert nichts. Alle anderen Ordner, die ich so getestet habe, werden problemlos geöffnet.

Wäre nett, wenn das mal jemand nachprüfen könnte - einfach einen Ordner wie "C:\test, test" anlegen und versuchen, den per ShellExecute(Application.Handle, nil, 'C:\test, test\', nil, nil, SW_SHOW); zu öffnen. Bei mir passiert einwandfrei reproduzierbar gar nichts.

Und außerdem wäre ich natürlich dankbar für eine vernünftige Alternative zu obigem ShellExecute-Aufruf.

Danke, worm


PS: Habe gerade mal unter HKEY_CLASSES_ROOT\Folder\shell\open\command nachgeguckt. Dort steht "%SystemRoot%\Explorer.exe /idlist,%I,%L" als Befehl. Das klingt natürlich so, als könnte das durch Kommata verwirrt werden. Allerdings hätte ich erwartet, dass das dann durch Anführungszeichen behoben wäre und außerdem klappt es im Explorer über das Kontextmenü ja auch.
Sieht das bei euch genauso aus? Anders? Scheint die Standardeinstellung bei meinem System zu sein.

_________________
In the beginning, the universe was created. This has made a lot of people very angry, and is generally considered to have been a bad move.
wolkenjäger
Hält's aus hier
Beiträge: 5

WIN 2000, WIN XP
Delphi 5
BeitragVerfasst: Di 23.05.06 00:43 
Hab's getestet:

ShellExecute(Application.Handle, nil, 'C:\test, test\', nil, nil, SW_SHOW);

Funktioniert unter Delphi5 & XP problemlos ...

_________________
Natur und Wahnsinn finden immer einen Weg ...
aim65
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 312

Win 9x, Win XP
Delphi 3pro, 7PE
BeitragVerfasst: Di 23.05.06 11:17 
Bei mir (D3 + XP) geht's :evil: NICHT

Edit: Mit 'Test;test' und 'test.test' geht's, nur mit Komma nicht....

@Wolkenjäger: Hast du vielleicht ein Space nach dem Komma (also 'test, test')? Dann geht's hier auch, grübel....
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Di 23.05.06 14:07 
Hallo,

das funktioniert mit D3 (XP).
Auf meinem system ist der gleiche REG_EXPAND_SZ-Wert in HKEY_CLASSES_ROOT\Folder\shell\open\command eingetragen.

Versuch mal die Variante:
ausblenden Delphi-Quelltext
1:
ShellExecute(Application.Handle, 'open''explorer'' /e "C:\test, test\"'nil, SW_SHOW);					

Hat auch den Vorteil das der Explorer in der Ordner-Ansicht geöffnet wird.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
worm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 135


D6 Prof
BeitragVerfasst: Di 23.05.06 15:36 
Danke erstmal für die Antworten.
Also bei einem das gleiche Problem (das Leerzeichen sollte aber keinen Unterschied machen, bei mir jedenfalls nicht), bei zwei anderen nicht. Die Delphi-Version sollte damit übrigens nichts zu tun haben, ist ja ein direkter Aufruf der Win32-API. Sollte also höchstens von der Windows-Version abhängen.

user profile iconLannes hat folgendes geschrieben:
Versuch mal die Variante:
ausblenden Delphi-Quelltext
1:
ShellExecute(Application.Handle, 'open''explorer'' /e "C:\test, test\"'nil, SW_SHOW);					

Hat auch den Vorteil das der Explorer in der Ordner-Ansicht geöffnet wird.
Danke, das würde zwar funktionieren, aber aber das sehe ich nicht als Vorteil. Es sollte nicht hardgecodet der Explorer aufgerufen werden, sondern der vom Benutzer normalerweise benutzte Dateimanager.

Nach wie vor merkwürdig. Wenn sich nicht noch mehr melden, gehe ich mal davon aus, dass es nur mein System betrifft. Damit wäre das Problem auch gelöst :wink:

_________________
In the beginning, the universe was created. This has made a lot of people very angry, and is generally considered to have been a bad move.