Hmm..
Es geht auch ohne shell extension.
(Habe erst letzte Woche damit experimentiert
)
Bei shell extension muss die
DLL sowohl als 32Bit, wie auch als 64Bit erstellt werden, da z.B. unter 64Bit Windows der Explorer auch immer 64bit ist und entsprechend nur eine 64Bit
DLL laden kann.
Jedoch wird z.B. beim OpenDialog einer 32Bit App der 32Bit Explorer geladen und dieser braucht dann eine 32Bit
DLL....
Hier mal als Beispiel ne .Reg, welche ein Menü-Eintrag mit 3 Sub Einträgen erzeugt (Notepad, Trenner, Word):
Code:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Classes\*\shell\CascadeTest]
"MUIVerb"="Test Cascade Menu"
"SubCommands"=""
[HKEY_CURRENT_USER\Software\Classes\*\shell\CascadeTest\Shell]
[HKEY_CURRENT_USER\Software\Classes\*\shell\CascadeTest\Shell\Cmd1]
@=""
"ICON"="\"C:\\Windows\\system32\\notepad.exe\",0"
"MUIVerb"="Open with Notepad"
[HKEY_CURRENT_USER\Software\Classes\*\shell\CascadeTest\Shell\Cmd1\command]
@="notepad.exe \"%V\""
[HKEY_CURRENT_USER\Software\Classes\*\shell\CascadeTest\Shell\Cmd2-Spacer]
[HKEY_CURRENT_USER\Software\Classes\*\shell\CascadeTest\Shell\Cmd3]
"MUIVerb"="Wordpad"
[HKEY_CURRENT_USER\Software\Classes\*\shell\CascadeTest\Shell\Cmd3\command]
@="wordpad.exe \"%V\""
SubCommands="" sorg dafür, dass Untermenüs möglich sind.
MUIVerb = "xxx" ist für die Beschriftung
Wichtig sind auch die '"' bei der %V, damit auch Dateinamen mit Leerzeichen korrekt als Parameter übergeben wird.
Und verwende %V statt %1, mit %1 hat es an und ab nicht geklappt..
Auch funktionieren DOS-Variablen wie %SYSTEM% nicht im command..
Wenn Du Einträge in einer bestimmten Reihenfolge brauchst, dann müssen die Subcommands (hier 'Cmd1','CM2..) so benannt werden, dass sie Alphabetisch aufsteigend sind!
Edit:
Ach es ist mir aufgefallen, das ich hier die Shell vom 'HKEY_CURRENT_USER\Software\Classes\*\shell' verwende, ist aber identisch zu 'HKEY_CLASSES_ROOT\*\shell', mit dem Unterschied, dass unter HKEY_CLASSES_ROOT eingetragene Menüs bei allen Usern auf dem Rechner erscheinen, bei HKEY_CURRENT_USER nur beim aktuell angemeldeten. Außerdem benötigt man unter HKEY_CLASSES_ROOT elevated Rechte, wenn deine Menüs durch dein Tool angelegt werden, hingegen unter HKEY_CURRENT_USER nicht
Ach ja für Verzeichnisse verwende 'HKEY_CLASSES_ROOT\Directory\shell', bzw. 'HKEY_CURRENT_USER\Software\Classes\Directory\shel l' um dort entsprechende Menüs anzulegen.