x64 und Context Menu - mal wieder
Moderators: Hacker, Stefan2, white
2Tahattmeruh
Ich konnte den Absturz hier (Vista32) leider nicht reproduzieren, bin aber über einige Unverträglichkeiten der Implementierung mit den OwnerDraw Menüs von TortoiseSVN gestolpert.
Ein Austausch des Orginalsamplecodes von Johansson, durch eine überarbeitete Version
http://www.codeproject.com/KB/cs/shellContextMenu.aspx
hat diese Probleme hier allerdings behoben.
Kannst du nochmal unter Vista64 mit TortoiseSVN ausprobieren, ob die Änderungen auch den Absturz beseitigen?
Download: http://holgerk.drivehq.com//TC/ExplorerMenu4TC.zip
Gruß,
Holger
Ich konnte den Absturz hier (Vista32) leider nicht reproduzieren, bin aber über einige Unverträglichkeiten der Implementierung mit den OwnerDraw Menüs von TortoiseSVN gestolpert.
Ein Austausch des Orginalsamplecodes von Johansson, durch eine überarbeitete Version
http://www.codeproject.com/KB/cs/shellContextMenu.aspx
hat diese Probleme hier allerdings behoben.
Kannst du nochmal unter Vista64 mit TortoiseSVN ausprobieren, ob die Änderungen auch den Absturz beseitigen?
Download: http://holgerk.drivehq.com//TC/ExplorerMenu4TC.zip
Gruß,
Holger
- Tahattmeruh
- Senior Member
- Posts: 244
- Joined: 2003-05-16, 13:35 UTC
Tahattmeruh wrote:Jetzt gehts. Juhu.


Das war mir auch schon aufgefallen, allerdings habe ich es zuerst nicht als so wichtig angesehen, da man bei der Benutzung des Buttons sowieso die Maus in der Hand hat, um den Fokus wieder auf den TC zu setzen.Ich ruf das Context Menu auf, dann klicke ich etwas an.
Funktioniert. Nur leider bekommt der TC den Fokus nicht wieder.
Kannst du das vielleicht beheben?
Wenn das Menu allerdings über Hotkey aufgerufen wird, ist das wirklich lästig.... (momentaner Workaround: mit <Alt+Tab> zum TC zurück...)
Mal sehen was sich da machen lässt (kann aber noch etwas dauern bis ich dazu komme).
Ein weiteres Problem, das noch auf der ToDo-Liste steht, ist das TC sich beim Beenden mit:
beschwert.---------------------------
Total Commander
---------------------------
Warnung: Wenn Sie Total Commander jetzt beenden, werden
einige (von Total Commander entpackte) temporäre Dateien nicht gelöscht,
da die damit gestarteten Programme noch laufen!
Trotzdem beenden?
---------------------------
Yes No
---------------------------
Ich schätze das bezieht sich auf die temporäre Liste (muss ich wohl selber löschen).
Aber den TC beendet man ja nicht.

Gruß,
Holger
- Tahattmeruh
- Senior Member
- Posts: 244
- Joined: 2003-05-16, 13:35 UTC
- Tahattmeruh
- Senior Member
- Posts: 244
- Joined: 2003-05-16, 13:35 UTC
Ja das ist ein Workaround.Tahattmeruh wrote:... Wenn man dieses zuerst beendet, dann fragt der TC auch nicht mehr nach ob man wirklich beenden möchte
Leider scheint es nicht zu helfen wenn ich die temporäre Liste selber lösche.
TC kriegt irgendwie noch mit, dass der Thread an den die Liste übergeben wurde noch lebt.
Und vorzeitig den eigenen Thread selber beenden, kann ich auch nicht, wenn ich nicht die gleiche Schnüffelei für etwaige vom Kontextmenü aufgerufene Dialoge einbaue (die würden ansonsten ungewollt mit beendet).
Ich bin leider noch nicht dazu gekommen an dem Fokusproblem weiterzuarbeiten.
Werde mich aber demnächst darum kümmern.
Gruß,
Holger
- Tahattmeruh
- Senior Member
- Posts: 244
- Joined: 2003-05-16, 13:35 UTC
Sorry, ich bin leider noch nicht dazu gekommen daran weiterzuarbeiten.
Du kannst das Kontextmenü des momentanen Verzeichnisses allerdings mit dem folgende Übergabeparameter aufrufen (hier mal als Button per Copy&Paste eingefügt):
Am besten einen alternativen Hotkey z.B. <ALT+Shift+F10> dafür definieren. Es ist dabei auch nicht notwendig den Cursor auf ".." zu platzieren.
TC scheint in diesem Fall kein temporäreres List-file zu erzeugen.
Vielleicht komme ich ja über das aktuelle Verzeichnis dran.
Mal sehen.
Apropos List-file: Leider funktioniert das Löschen des List-Files nicht, um TC auszutricksen (per pedes ausprobiert) beim Beenden die Warnung bezüglich der temporären Datei nicht auszugeben.
Wenn ich dazu komme werde ich diese Woche noch einen -S Parameter einbauen mit dem ExplorerMenu4TC manuell beendet werden kann.
Dann ist man wenigstens das ungute Gefühl los, dass irgend ein anderes Programm noch eine temporäre (wichtige) Datei geöffnet hat.
Gruß,
Holger
Du kannst das Kontextmenü des momentanen Verzeichnisses allerdings mit dem folgende Übergabeparameter aufrufen (hier mal als Button per Copy&Paste eingefügt):
Code: Select all
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Addons\ExplorerMenu4TC.exe
"%P\"
%COMMANDER_PATH%\Addons\ExplorerMenu4TC.exe
64Bit Explorer menu (Parent Folder)
-1
TC scheint in diesem Fall kein temporäreres List-file zu erzeugen.
Vielleicht komme ich ja über das aktuelle Verzeichnis dran.
Mal sehen.
Apropos List-file: Leider funktioniert das Löschen des List-Files nicht, um TC auszutricksen (per pedes ausprobiert) beim Beenden die Warnung bezüglich der temporären Datei nicht auszugeben.
Wenn ich dazu komme werde ich diese Woche noch einen -S Parameter einbauen mit dem ExplorerMenu4TC manuell beendet werden kann.
Dann ist man wenigstens das ungute Gefühl los, dass irgend ein anderes Programm noch eine temporäre (wichtige) Datei geöffnet hat.
Gruß,
Holger
2Tahattmeruh
Ich - mal wieder.
Neue Version: http://holgerk.drivehq.com//TC/ExplorerMenu4TC.zip
Änderungen:
- neuer Parameter -Stop um die ExplorerMenu4TC.exe zu beenden.
Damit kann die Warnung bezüglich der temporären Files im TC umgangen werden.
- -List und -Stop sind jetzt case insensitive (kann also auch -LiSt geschrieben werden).
- ExplorerMenu4TC.exe taucht jetzt nicht mehr im Task-Manger auf (nur noch unter Prozesse).
- Kontextmenu auf ".." (momentanes Verzeichnis) wird anhand des fehlenden Übergabeparameters erkannt und angezeigt.
- Das Fokusproblem bei Tastaturbedienung sollte jetzt weitgehendst gelöst sein
Passende User-Kommandos dazu:
Was bleibt, ist die Einschränkung, dass die markierten Dateien alle im gleichen Verzeichnis liegen müssen.
Aber daran werde ich aus Zeitgründen wahrscheinlich nichts mehr ändern.
Mit freundlichem Gruß,
Holger
Ich - mal wieder.

Neue Version: http://holgerk.drivehq.com//TC/ExplorerMenu4TC.zip
Änderungen:
- neuer Parameter -Stop um die ExplorerMenu4TC.exe zu beenden.
Damit kann die Warnung bezüglich der temporären Files im TC umgangen werden.
- -List und -Stop sind jetzt case insensitive (kann also auch -LiSt geschrieben werden).
- ExplorerMenu4TC.exe taucht jetzt nicht mehr im Task-Manger auf (nur noch unter Prozesse).
- Kontextmenu auf ".." (momentanes Verzeichnis) wird anhand des fehlenden Übergabeparameters erkannt und angezeigt.
- Das Fokusproblem bei Tastaturbedienung sollte jetzt weitgehendst gelöst sein

Passende User-Kommandos dazu:
Hotkey:user.ini wrote:[em_64BitExplorerMenu]
button=%COMMANDER_PATH%\Addons\ExplorerMenu4TC.exe
cmd=%COMMANDER_PATH%\Addons\ExplorerMenu4TC.exe
param=-List "%L"
menu=64Bit Explorer menu
[em_64BitExplorerMenuShutdown]
button=%COMMANDER_PATH%\Addons\ExplorerMenu4TC.exe
cmd=%COMMANDER_PATH%\Addons\ExplorerMenu4TC.exe
param=-Stop
menu=shutdown 64Bit Explorer menu helper
und die entsprechenden Buttons:wincmd.ini wrote:[Shortcuts]
CS+F10=em_64BitExplorerMenu
CAS+F10=em_64BitExplorerMenuShutdown
Clippboard wrote:TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Addons\ExplorerMenu4TC.exe
-List "%L"
%COMMANDER_PATH%\Addons\ExplorerMenu4TC.exe
64Bit Explorer menu
-1
Wichtig ist, dass der Pfad im Kommando jetzt leer bleiben muss, damit das Menü auch für ".." funktioniert!TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Addons\ExplorerMenu4TC.exe
-Stop
%COMMANDER_PATH%\Addons\ExplorerMenu4TC.exe
shutdown 64Bit Explorer menu helper
-1
Was bleibt, ist die Einschränkung, dass die markierten Dateien alle im gleichen Verzeichnis liegen müssen.
Aber daran werde ich aus Zeitgründen wahrscheinlich nichts mehr ändern.
Mit freundlichem Gruß,
Holger
- Tahattmeruh
- Senior Member
- Posts: 244
- Joined: 2003-05-16, 13:35 UTC
Danke für die neue Version.HolgerK wrote:Was bleibt, ist die Einschränkung, dass die markierten Dateien alle im gleichen Verzeichnis liegen müssen.
Aber daran werde ich aus Zeitgründen wahrscheinlich nichts mehr ändern.
Mit der Einschränkung kann ich persönlich leben da ich das auch noch nie anders benutzt habe.
Werde ich morgen gleich mal testen.
- Tahattmeruh
- Senior Member
- Posts: 244
- Joined: 2003-05-16, 13:35 UTC
Mir ist gerade ein nerviger Bug aufgefallen.
Lege im TC einen Ordner an. Kopiere eine Datei dort hin und packe oder entpacke sie.
Wichtig ist glaub ich nur daß das Menü aufgerufen wird.
Dann geh wieder ein Verzeichnis zurück und versuch es zu löschen.
Leider klappt das nicht weil dein Programm irgendwie das Verzeichnis sperrt.
Wenn ich im Taskmanager das Programm beende kann ich löschen.
Lege im TC einen Ordner an. Kopiere eine Datei dort hin und packe oder entpacke sie.
Wichtig ist glaub ich nur daß das Menü aufgerufen wird.
Dann geh wieder ein Verzeichnis zurück und versuch es zu löschen.
Leider klappt das nicht weil dein Programm irgendwie das Verzeichnis sperrt.
Wenn ich im Taskmanager das Programm beende kann ich löschen.
Tja, da haben wir jetzt ein (minimales) Scylla&Charybdis Problem.Tahattmeruh wrote:...Leider klappt das nicht weil dein Programm irgendwie das Verzeichnis sperrt.

Wenn du den Startpfad im em_64BitExplorerMenu Kommando angibst, dann ist nur dieses Verzeichnis geblockt.
Dann kann ExplorerMenu4TC.exe allerdings nicht mehr das Kontextmenu für [..] aufrufen, weil TC das momentane angezeigte Verzeichnis nicht als aktuelles Verzeichnis setzt.
Das Problem tritt übrigens nur beim allerersten Aufruf des Kontextmenues auf. Der dann aktuelle Pfad bleibt in der Hintergrundinstanz erhalten.
Ich werd mal sehen ob ich den CurrentPath von ExplorerMenu4TC.exe umsetzen kann, nachdem ich ihn ausgelesen habe.
Taskmanger ist overkill.Wenn ich im Taskmanager das Programm beende kann ich löschen.
Es reicht aus wenn du mit em_64BitExplorerMenuShutdown oder entsprechenden Hotkey das Exlporermenu einfach beendest.
Gruß,
Holger
- ghisler(Author)
- Site Admin
- Posts: 50746
- Joined: 2003-02-04, 09:46 UTC
- Location: Switzerland
- Contact:
Das liesse sich einfach durch einen Aufruf von SetCurrentDirectory("\\"); lösen.
Author of Total Commander
https://www.ghisler.com
https://www.ghisler.com
Neue Version: http://holgerk.drivehq.com/TC/ExplorerMenu4TC.zip
Änderung:
- Als CurrentDirectory wird jetzt %windir%\system32 gesetzt um kein Verzeichnis zu blockieren.
2Tahattmeruh
Ich hoffe du hast nicht vor das System32-Verzeichnis zu löschen
Bitte mit Vista 64Bit testen ob das Problem damit behoben ist.
Ich habe das momentan nur unter Vista 32Bit getestet.
2ghisler(Author)
Danke für den Hinweis.
Das Rootverzeichnis kann natürlich nicht gelöscht werden.
Ich habe mich allerdings in diesem Fall für maximale Kompatibilität zur Explorer.exe entschieden.
Afair werden DLLs zuerst im CurrentDirectory und danach erst über den Suchpfad gefunden.
Es ist zwar sehr unwahrscheinlich, dass eine DLL aus dem Rootverzeichnis über eine ExplorerExtension nachgeladen wird, aber wer weiss...
Mit freundlichem Gruß,
Holger
Änderung:
- Als CurrentDirectory wird jetzt %windir%\system32 gesetzt um kein Verzeichnis zu blockieren.
Code: Select all
System.Environment.CurrentDirectory = System.Environment.GetEnvironmentVariable("windir") + "\\System32";
Ich hoffe du hast nicht vor das System32-Verzeichnis zu löschen

Bitte mit Vista 64Bit testen ob das Problem damit behoben ist.
Ich habe das momentan nur unter Vista 32Bit getestet.
2ghisler(Author)
Danke für den Hinweis.
Das Rootverzeichnis kann natürlich nicht gelöscht werden.

Ich habe mich allerdings in diesem Fall für maximale Kompatibilität zur Explorer.exe entschieden.
Afair werden DLLs zuerst im CurrentDirectory und danach erst über den Suchpfad gefunden.
Es ist zwar sehr unwahrscheinlich, dass eine DLL aus dem Rootverzeichnis über eine ExplorerExtension nachgeladen wird, aber wer weiss...
Mit freundlichem Gruß,
Holger