Einzelnen Beitrag anzeigen

HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
961 Beiträge
 
Delphi 6 Professional
 
#3

AW: Erweiterung Kontextmenü im Windows Explorer

  Alt 26. Jul 2017, 18:30
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.

Geändert von HolgerX (26. Jul 2017 um 18:39 Uhr)
  Mit Zitat antworten Zitat