Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Betriebssysteme (https://www.delphipraxis.net/27-betriebssysteme/)
-   -   Erweiterung Kontextmenü im Windows Explorer (https://www.delphipraxis.net/193403-erweiterung-kontextmenue-im-windows-explorer.html)

pesi 26. Jul 2017 16:54

Betriebssystem: Win 7,Win 10

Erweiterung Kontextmenü im Windows Explorer
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

wie man eine einfache Erweiterung im Kontextmenü des Explorers hinbekommt habe ich schon herausgefunden.
Da geht es um die Einträge in der Registry unter HKEY_CLASSES_ROOT\*\shell\..... (siehe Screenshot)

Ich würde nun aber gerne unterhalb meines Eintrages weitere Unter-Einträge haben, also die sich dann aufklappen wie z.B. beim "Senden an" oder "Freigeben für".
Dafür habe ich leider bisher noch nichts gefunden. Entweder hat mir bisher das richtige Schlüsselwort zum Googlen gefehlt oder gibt es diese Möglichkeit nicht :shock:

Danke für Eure Hilfe

Gruß Peter

himitsu 26. Jul 2017 16:58

AW: Erweiterung Kontextmenü im Windows Explorer
 
Stichwort: shell extension

http://www.delphipraxis.net/163141-w...erweitern.html
www.del-net.com/delphi/topic10.html

HolgerX 26. Jul 2017 18:30

AW: Erweiterung Kontextmenü im Windows Explorer
 
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.

pesi 26. Jul 2017 18:47

AW: Erweiterung Kontextmenü im Windows Explorer
 
SEHR COOL Holger! :-D Vielen lieben Dank - genau das was ich gesucht habe!

Funktioniert auch FAST perfekt, nur Dein "Cmd2-spacer" Eintrag macht nicht was ich vermute was er machen soll. Er erzeugt nämlich keine Leerzeile oder Trennstrich sonder einen weiteren Texteintrag "Cmd2-spacer" :) Okay, so einen Trenner brauche ich nicht zwingend, aber wenn wir schon dabei sind, vielleicht hast Du da ja nur was vergessen??? :-D

Danke & Gruß

pesi 26. Jul 2017 18:48

AW: Erweiterung Kontextmenü im Windows Explorer
 
Ach so und das mit den CURRENT USER etc. war mir soweit eh klar, aber trotzdem danke auch für diese Hinweise! :thumb:

HolgerX 27. Jul 2017 07:01

AW: Erweiterung Kontextmenü im Windows Explorer
 
Hmm..

Zitat:

Zitat von pesi (Beitrag 1377531)
Funktioniert auch FAST perfekt, nur Dein "Cmd2-spacer" Eintrag macht nicht was ich vermute was er machen soll. Er erzeugt nämlich keine Leerzeile oder Trennstrich sonder einen weiteren Texteintrag "Cmd2-spacer" :) Okay, so einen Trenner brauche ich nicht zwingend, aber wenn wir schon dabei sind, vielleicht hast Du da ja nur was vergessen??? :-D

Ich Verwende hier Windows 7 64Bit.
Hier wird eine mit "Cmd2-spacer" eine Trennlinie erzeugt, was aber auch am klassischen Desktop liegen kann.

Edit
Hab da mal was gefunden:
https://blog.sverrirs.com/2014/05/cr...-items-in.html

himitsu 27. Jul 2017 08:10

AW: Erweiterung Kontextmenü im Windows Explorer
 
So wird auch
Delphi-Quellcode:
@="-"
kein Spacer daraus?

HolgerX 27. Jul 2017 08:23

AW: Erweiterung Kontextmenü im Windows Explorer
 
Zitat:

Zitat von himitsu (Beitrag 1377551)
So wird auch
Delphi-Quellcode:
@="-"
kein Spacer daraus?

Leider nicht, dann wird ein '-' als Bezeichnung angezeigt.

Jedoch geht es mit "CommandFlags"=dword:00000040 innerhalb eines SubEintrages.
(Siehe meinen Link).

HolgerX 27. Jul 2017 08:39

AW: Erweiterung Kontextmenü im Windows Explorer
 
Hier mal ein kleines Muster

Code:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\CascadeTest]
"MUIVerb"="Test Cascade Menu"
"Position"="Top"
"SeparatorAfter"=""
"SeparatorBefore"=""
"SubCommands"=""

[HKEY_CLASSES_ROOT\*\shell\CascadeTest\Shell]

[HKEY_CLASSES_ROOT\*\shell\CascadeTest\Shell\Cmd1]
"CommandFlags"=dword:00000040
"MUIVerb"="Öffene über Explorer"
"ICON"="explorer.exe,0"

[HKEY_CLASSES_ROOT\*\shell\CascadeTest\Shell\Cmd1\command]
@="explorer.exe \"%V\""

[HKEY_CLASSES_ROOT\*\shell\CascadeTest\Shell\Cmd2]
"ICON"="\"notepad.exe\",0"
"MUIVerb"="Open with Notepad"

[HKEY_CLASSES_ROOT\*\shell\CascadeTest\Shell\Cmd2\command]
@="\"notepad.exe\" \"%V\""

[HKEY_CLASSES_ROOT\*\shell\CascadeTest\Shell\Cmd3]
"ICON"="\"%ProgramFiles%\\Windows NT\\Accessories\\wordpad.exe\",0"
"MUIVerb"="Wordpad"

[HKEY_CLASSES_ROOT\*\shell\CascadeTest\Shell\Cmd3\command]
@="wordpad.exe \"%V\""

himitsu 27. Jul 2017 09:21

AW: Erweiterung Kontextmenü im Windows Explorer
 
Dann noch 'ne interessante Frage

Ist
Delphi-Quellcode:
%ProgramFiles%
in einem 32 Bit-Explorer was Anderes, als im 64 Bit-Explorer?
Und was passiert irgendwann im 256 Bit-Explorer?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:49 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz