kkboy94
Goto Top

Kontextmenü-Eintrag für Verknüpfungen und passender Befehl

Hallo Administratoren-Freunde,

der Titel ist auch schon meine eigentliche Frage.
Konkreter: Ich möchte einen Kontextmenü-Eintrag erstellen, welcher aber nur bei Verknüpfungen zu sehen ist. Der Kontextmenü-Eintrag soll dann den der Verknüpfung übergeordneten Ordner öffnen. Aber bevor ich den Kontextmenü-Eintrag erstellen kann, muss ich ja wissen wo ich die Änderungen in der Registry vornehmen muss.

Den folgenden Artikel habe ich mir ergoogelt:
http://support.microsoft.com/kb/509254/#top

Aber ich bin auch noch am Rätseln welchen Befehl ich bei Standard dann hinschreibe. Meine ersten Überlegungen waren diese hier:
cd %1 & cd ..


MfG Karsten

Content-Key: 148065

Url: https://administrator.de/contentid/148065

Ausgedruckt am: 29.03.2024 um 01:03 Uhr

Mitglied: paulepank
paulepank 01.08.2010 um 15:02:30 Uhr
Goto Top
Hallo Karsten,

da du mit dem Kommando cd operierst, vermute ich du willst den übergeordneten Ordner in der Console öffnen.
Hier eine Möglichkeit:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\lnkfile\shell]

[HKEY_CLASSES_ROOT\lnkfile\shell\ueber]
@="Übergeordneter Ordner"  

[HKEY_CLASSES_ROOT\lnkfile\shell\ueber\command]
@="cmd /k \"cd ..\""  
Die Zeilen in eine reg.Datei stecken und doppelklicken
cu paulepank
Mitglied: kkboy94
kkboy94 01.08.2010 um 15:36:23 Uhr
Goto Top
Erst einmal Danke.

Und jetzt die Fragen/An-/Bemerkungen:
Was bedeutet das "@"?
Und:
Ich möchte eigentlich den übergeordeten Ordner im Explorer öffnen.
Mitglied: Friemler
Friemler 01.08.2010 um 15:40:06 Uhr
Goto Top
Hallo Karsten,

das Vorgehen, was paulepank schildert, ist das Standardvorgehen bei normalen Dateierweiterungen, z.B. .txt oder auch * für alle Dateien. Der Code ist der Inhalt einer .reg-Datei, den Du durch Doppelklick in die Registry importieren musst.

Ich hatte zuerst die selbe Idee und habe das eben unter Windows XP Professional SP3 getestet. Es hat nicht funktioniert. Aber probiere es ruhig mal selbst aus. Falls es klappt, würde ich Zeile 9 folgendermaßen ändern, dann geht ein Explorerfenster mit dem übergeordneten Verzeichnis auf:

@="explorer \"%~dp1\..\""  

Als Alternative gibt es die Windows 95 Powertoys (Download: http://download.microsoft.com/download/5/2/e/52e8fd68-e528-4995-abe2-56 ... ). ACHTUNG: Die kann man nur bis Windows XP verwenden!! In Windows 7 ist aber im Kontextmenü von Verknüpfungen auf Verzeichnisse ein Punkt "Ordnerpfad öffnen" und im Kontextmenü von Verknüpfungen auf Dateien ein Punkt "Dateipfad öffnen" enthalten. Bei Vista weiß ich es nicht. Für Windows 7 brauchst Du also keinen zusätzlichen Kontextmenüeintrag.

In Windows 95 Powertoys ist ein Powertoy namens Shortcut Target Menu enthalten. Die Setupdatei W95powertoy.exe kannst Du mit dem Programm Universal Extractor entpacken (Link: http://www.legroom.net/software/uniextract ). Du erhälst dann u.a. die Dateien target.dll und target.inf. Zum Installieren des ganzen machst Du einen Rechtsklick auf target.inf und wählst Installieren aus dem Kontextmenü. Du erhälst dann im Kontextmenü von Verknüpfungen einen Eintrag Target, der ein Submenü mit mehreren Möglichkeiten öffnet, was Du mit der Verknüpfung machen kannst, u.a. den Ordner öffnen, auf den die Verknüpfung zeigt.

Falls Dich die englischen Einträge im Kontextmenü stören, musst Du die target.dll vor dem Installieren mit einem Hexeditor patchen.

Gruß
Friemler
Mitglied: kkboy94
kkboy94 01.08.2010 um 15:53:55 Uhr
Goto Top
Also... als erstes ein dank auch für deinen Vorschlag
paulepanks Methode hat nicht funktioniert (Es öffnete sich lediglich das CMD-Prompt).
Mit deiner Alternative/Ergänzung, welche ich auch einfach mal probiert habe, öffnete sich immer die Festplatte "C:".
Aber noch eine Frage zu deinem Vorschlag:
Eigentlich verstehe ich deinen ganzen Vorschlag nicht, bzw. ich weiß nicht warum das überhaupt so funktioniert. Könntest du mich da noch aufklären?


MfG Karsten

:EDIT: Ich wollte nachher alles in eine Reg- oder Bat-Datei stecken, damit ich das auch auf anderen Rechnern benutzen kann, und die Leute vielleicht kein zusätzliches Programm installieren wollen.
Mitglied: Friemler
Friemler 01.08.2010 um 16:18:04 Uhr
Goto Top
Hallo Karsten,

der Vorschlag von paulepank funktioniert auch mit meiner Änderung

@="explorer \"%~dp1\..\""  

nicht. Hab's nochmal getestet. Durch %~dp1 wird Laufwerk und Pfad der Verknüpfung ermittelt und der Explorer mit dem Parameter "%~dp1\.." gestartet. Du erhälst dann immer das Verzeichnis, in dem sich die Verknüpfung befindet.

Zitat von @kkboy94:
Eigentlich verstehe ich deinen ganzen Vorschlag nicht, bzw. ich weiß nicht warum das überhaupt so funktioniert.
Könntest du mich da noch aufklären?

Verstehst Du den Vorschlag mit den Windows 95 Powertoys nicht oder die Änderung an paulepank's Code? Da ich immer noch nicht weiß, welches OS Du verwendest (Windows 95 Powertoys sind nur bis Windows XP verwendbar), weiß ich auch nicht, ob das für dich überhaupt praktikabel ist.

:EDIT: Ich wollte nachher alles in eine Reg- oder Bat-Datei stecken, damit ich das auch auf anderen Rechnern benutzen kann, und
die Leute vielleicht kein zusätzliches Programm installieren wollen.

Falls Du die Windows 95 Powertoys verwenden möchtest, gibt es da eine Lösung, einfach nochmal melden.

Gruß
Friemler
Mitglied: kkboy94
kkboy94 01.08.2010 um 16:27:56 Uhr
Goto Top
Okay Sorry hab ich wohl verpennt. Ich benutze
"WINDOWS XP SP3"
Ich habe mich leicht unverständlich ausgedrückt, das sehe ich ein ;). Aber ich meinte, ich wollte die Powertoys NICHT benutzen.

Den Powertoy Vorschlag habe ich verstanden, aber ich hatte deine Änderung nicht verstanden. Und aus reinem Interesse frage ich mal, ob ich den Teil mit dem "%~dp1" auch irgendwo nachlesen kann?


MfG Karsten
Mitglied: bastla
bastla 01.08.2010 um 16:39:13 Uhr
Goto Top
@Friemler
Wie sieht's aus, wenn Du beim "Escapen" von Sonderzeichen so richtig großzügig bist - also etwa:
@="explorer \/e\,\"%~dp1\\..\""
- wobei: Braucht es überhaupt nach "%~dp1" auch noch ein ".."?

Grüße
bastla
Mitglied: kkboy94
kkboy94 01.08.2010 um 16:56:41 Uhr
Goto Top
Was heißt "Escapen"?
Mitglied: Friemler
Friemler 01.08.2010 um 19:39:24 Uhr
Goto Top
Hallo Karsten,

zunächst mal Entschuldigung. Das mit dem "%~dp1\.." klappt garnicht. Heute ist nicht mein Tag face-sad . Wenn es so funktioniert hätte, wie ich dachte, wäre das Ergebnis trotzdem nicht das gewesen, was Du willst. Es hätte sich der Ordner geöffnet, in dem der Ordner liegt, wo die Verknüpfung gespeichert ist. "%~dp1" klappt auch nicht, da der Explorer die Datei "%~dp1" nicht finden kann. Du willst aber doch den Ordner öffnen, in dem das Ziel der Verknüpfung liegt, oder doch nicht? face-sad

Wenn es Dich überhaupt noch interessiert, wie ich darauf komme, mach' folgendes:

Start->Ausführen->cmd eingeben und [ENTER]->for /? eingeben und [ENTER]. Dann erscheint die erste Seite der Hilfe zum FOR-Befehl. Wenn Du 5 mal ENTER drückst, kommt ein Abschnitt "Zusätzlich wurde die Ersetzung von Verweisen auf FOR-Variablen erweitert. Sie können jetzt folgende Syntax verwenden:". Diese Hinweise gelten auch für die Parameter von Batchfiles %1, %2, ... %9. Die haben aber nichts mit %1, %2, usw. zu tun, die man in Kontextmenü-Einträgen als Parameter für das aufzurufende Programm verwenden kann.

Zitat von @kkboy94:
... und die Leute vielleicht kein zusätzliches Programm installieren wollen.

Das Problem ist, das der Ordner, in dem das Objekt liegt, auf das die Verknüpfung zeigt, in der Verknüpfung abgespeichert ist. D.h. er muss erstmal ausgelesen werden. Das kann nur mit einem Zusatzprogramm bewerkstelligt werden.

Gruß
Friemler
Mitglied: bastla
bastla 01.08.2010 um 19:58:56 Uhr
Goto Top
@Friemler
Wenn's auch für den hier angestrebten Zweck etwas unhandlich ist - das Auslesen des Verknüpfungszieles lässt sich auch mit Bordmittlen realisieren - Beispiel:
@echo off & setlocal
set "Shortcut=%allusersprofile%\Desktop\Adobe Reader 9.lnk"  

set R=%temp%\ReadTargetFromShortcut.vbs
>%R% echo WScript.Echo WScript.CreateObject("WScript.Shell").CreateShortcut(WScript.Arguments(0)).TargetPath  

for /f "delims=" %%i in ('cscript //nologo %R% "%Shortcut%"') do set "Target=%%i"  
echo %Target%
Grüße
bastla
Mitglied: Friemler
Friemler 01.08.2010 um 20:24:50 Uhr
Goto Top
Hallo bastla,

wieder was gelernt. Danke.

Gruß
Friemler
Mitglied: rubberman
rubberman 01.08.2010 um 21:58:09 Uhr
Goto Top
Hallo zusammen,

wenn schon VBS eine Lösung darstellt, warum dann nicht gleich VBS nutzen?!

Zusammenfassend etwa so:
C:\link.vbs
Set oSh=WScript.CreateObject("WScript.Shell")  
LNKfullname=oSh.CreateShortcut(WScript.Arguments(0)).TargetPath
LNKpath=WScript.CreateObject("Scripting.FileSystemObject").GetParentFolderName(LNKfullname)  
oSh.Run "explorer.exe """ & LNKpath & """"  

link.reg
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\lnkfile\shell]

[HKEY_CLASSES_ROOT\lnkfile\shell\ueber]
@="Übergeordneter Ordner"  

[HKEY_CLASSES_ROOT\lnkfile\shell\ueber\command]
@="c:\\windows\\system32\\wscript.exe c:\\link.vbs \"%1\""  

Nachdem link.vbs unter C: gespeichert worden ist und link.reg ausgeführt ist, die Exploreransicht einmal aktualisieren und schon kann's losgehen.

Grüße
rubberman
Mitglied: bastla
bastla 01.08.2010 um 22:15:35 Uhr
Goto Top
Hallo rubberman!

Hybsch face-smile

Den Speicherort würde ich allerdings anders wählen, und wenn's nicht nur ein "Arbeitsplatz-", sondern ein "Explorer-"Fenster sein soll, dann:
oSh.Run "explorer /e,""" & LNKpath & """"
Grüße
bastla
Mitglied: rubberman
rubberman 01.08.2010 um 22:40:28 Uhr
Goto Top
Hallo bastla,

natürlich sind einige Anpassungen möglich, von Speicherort, über Optionen bis Windowstate. War erst mal die simpelste Variante.

Grüße
rubberman
Mitglied: kkboy94
kkboy94 03.08.2010 um 15:21:53 Uhr
Goto Top
Danke erstmal für alle eingegangenen Vorschläge/Lösungen. Ich entschuldige mich auch mal direkt dafür, dass ich in letzter Zeit zwar ab und zu online war, aber nich geantwortet habe. Ich war halt an einem anderen PC, wo ich nicht unbedingt in der Registry rumprobieren wollte...

Nun zum Thema:

Rubberman's Lösung reichte vollkommen aus. Funktioniernt super.. Danke dafür.
@ Bastla: Deine änderung habe ich auch mal ausprobiert, aber ich bezeichne diese Ansichten halt immer als explorer-Fenster, da sie von der explorer.exe gesteuert sind, doer nicht?

Und nochmal zu rubberman: Was meinst du für Optionen, bzw mit "Speicherort, über Optionen bis Windowstaste"?

Und noch weiter Fragen:
1. Kann man alles mit nur EINER Datei bewerkstelligen? Und wenn NEIN dann die zweite Frage:
Ist es möglich den Pfad/Command varaibel zu gestalten, so dass man die "link.vbs" in einen beliebigen Ordner tun kann?

:EDIT: Mit einer Datei meine ich nur die Reg-Datei :/Edit:


MfG Karsten
Mitglied: rubberman
rubberman 03.08.2010 um 19:15:46 Uhr
Goto Top
Hallo Karsten.

Mit Speicherort ist der Pfad zur VBS Datei gemeint.
Eine der Optionen des Explorers hat bastla schon vorgestellt.
Mit Windowstate meinte ich den Windowstyle, den du bei der Run Methode festlegen kannst (maximiert öffnen etc.)

Alles in eine Datei packen? Joa, wir sind ja hier bei Batch & Shell.

register.bat
@echo off &setlocal
:: hier kannst du anpassen
set "vbsFullName=%SystemRoot%\link.vbs"  

(
echo Set oSh=WScript.CreateObject^("WScript.Shell"^)  
echo LNKfullname=oSh.CreateShortcut^(WScript.Arguments^(0^)^).TargetPath
echo LNKpath=WScript.CreateObject^("Scripting.FileSystemObject"^).GetParentFolderName^(LNKfullname^)  
echo oSh.Run "explorer.exe """ ^& LNKpath ^& """"  
)>"%vbsFullName%"  

chcp 1252>nul
reg add "HKCR\lnkfile\shell\ueber" /ve /d "Übergeordneter Ordner" /f  
reg add "HKCR\lnkfile\shell\ueber\command" /t REG_EXPAND_SZ /ve /d "%%SystemRoot%%\system32\wscript.exe \"%vbsFullName%\" \"%%1\"" /f  

Naja, die VBS Datei lässt sich letztlich nicht wegkürzen. face-wink

Grüße
rubberman
Mitglied: kkboy94
kkboy94 03.08.2010 um 20:37:05 Uhr
Goto Top
Danke, funktioniert Super.

Nächste Frage: Wie sähe denn eine batch aus, welche die dort angelegten Schlüssel wieder löscht?

MfG Karsten

:EDIT: Hat sich erledigt. Mit "reg delete" mach ich das ^^