IT-Academy Logo
Sign Up Login Help
Home - Betriebssysteme - Windows - Desktop Erweiterung - Kontextmenüs selber gemacht



Desktop Erweiterung - Kontextmenüs selber gemacht

Die Kontextmenüs unter Windows sind problemlos um eigene Einträge erweiterbar – schon ein Zweizeiler genügt.


Autor: Simon Ostermann (D-Fred)
Datum: 29-06-2003, 18:35:15
Referenzen: keine
Schwierigkeit: Profis
Ansichten: 11048x
Rating: 8.4 (5x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Einleitung

Eines der schönsten Dinge an der Arbeitsoberfläche von Windows ist die Möglichkeit, darauf die unterschiedlichsten Objekte abzulegen. Aber oftmals ist nach intensiver Arbeit gerade der Desktop komplett mit unzähligen Fenstern bedeckt, so dass man nur nach vielen Mausklicks an die darauf abgelegten Dateien gelangt. Als Lösung für diesen lästigen Umstand könnte man sich einen Eintrag im Kontextmenü des Startknopfes vorstellen, der den betreffenden Ordner öffnet - denn schließlich ist die Arbeitsoberfläche nichts anderes als ein ganz normales Verzeichnis.

Eine gute Idee, nur wird sie von Windows zunächst nicht geboten. Dennoch gibt es eine Möglichkeit hierfür, da sich die Shell dank ihres modularen Aufbaus im Handumdrehen erweitern lässt - auch um Einträge in den diversen Kontextmenüs.




Mit zwei Zeilen ist man dabei

Der Schlüssel zu eigenen Kontextmenüeinträgen liegt - wie so oft - in der Registrierung von Windows. Unter HKEY_CLASSES_ROOT sind alle dem System bekannten Objekttypen eingetragen. Dabei kann es sich um ganz normale Dateitypen wie beispielsweise .txt handeln. Aber es sind auch allgemeinere Einträge vorhanden, etwa *, Folder oder Drive. Diese stehen für beliebige Dateien, Ordner und Laufwerke. Je nach Bezug kann nun für den betreffenden Objekttyp ein Eintrag für dessen Kontextmenü vereinbart werden, die im Unterschlüssel Shell aufgenommen werden. Soll beispielsweise im Kontextmenü von Ordnern ein zusätzlicher Eintrag aufgenommen werden, so lautet der betreffende Schlüssel HKEY_CLASSES_ROOT \Folder \Shell (zum Verständnis: Auch der Startknopf von Windows gehört zur Gattung der Ordner). Um nun den eingangs erwähnten Eintrag zum Öffnen des Desktop-Ordners zu verwirklichen, sind folgende Schritte nötig:
  1. Zunächst ist der Registrierungseditor regedit.exe zu starten und damit der Schlüssel HKEY_CLASSES_ROOT \Folder \Shell zu öffnen.
  2. Hierin wird dann ein Unterschlüssel mit beliebigen Namen angelegt, beispielsweise OeffneDesktop. Bei der Namensgebung ist allerdings darauf zu achten, dass keine Umlaute oder sonstige Sonderzeichen verwendet werden.
  3. Im dritten Schritt ist diesem neuen Schlüssel dann eine Zeichenkette mit dem Text für den Kontextmenüeintrag zuzuweisen, beispielsweise Öffne &Desktop. Hierbei sind Umlaute und dergleichen zugelassen. Mit dem Ampersand (&) kann zudem festgelegt werden, welches Zeichen als Hotkey fungieren soll - in diesem Fall ist es das D von "Desktop".
  4. Der Schlüssel OeffneDesktop erhält nun einen weiteren Unterschlüssel namens Command.
  5. Wie der Name bereits vermuten lässt, erhält dieser Unterschlüssel eine Zeichenkette mit dem auszuführenden Befehl. Zum Öffnen des Arbeitsoberflächenverzeichnisses ist hier Explorer c:\windows\desktop einzutragen.



Das war schon alles! Wird jetzt mit der rechten Maustaste auf den Startknopf oder das Icon eines Verzeichnisses geklickt, erscheint auch der Eintrag Öffne Desktop. Ein weiterer Klick darauf, und der gewünschte Ordner wird geöffnet. Wer den Umgang mit dem Registrierungseditor weniger schätzt und statt dessen lieber mit fertigen Scripts arbeitet, erreicht das gleiche Ergebnis mit folgendem Text:

REGEDIT4
[HKEY_CLASSES_ROOT\Folder\shell\OeffneDesktop]
@="Öffne &Desktop"
[HKEY_CLASSES_ROOT\Folder\shell\OeffneDesktop\command]
@="Explorer.exe
C:\\WINDOWS\\Desktop"


Wird er unter beliebigem Namen, aber mit der Endung .reg gespeichert, so genügt ein Doppelklick auf diese Datei, und schon sind die entsprechenden Einträge gemacht - und das Kontextmenü erweitert. Man lasse sich nicht durch die vielen Rückstriche (\) verwirren, denn teilweise handelt es sich nur um Ersatzzeichen. So steht \\ für einen einzelnen Rückstrich und \" für ein Anführungszeichen.

Übrigens: Die in Microsofts Power Toys enthaltenen Tools "Explore here" und "DOS here" zum Öffnen des Explorers beziehungsweise einer DOS-Box über das Kontextmenü eines Ordners funktionieren exakt genauso:

REGEDIT4
[HKEY_CLASSES_ROOT\Directory\shell\DosHere]
@="Command &Prompt Here"
[HKEY_CLASSES_ROOT\Directory\shell\DosHere\command]
@="C:\\WINDOWS\\command.com /k cd \"%1\""

Eine weitere praktische Anwendung für ein "aufgebohrtes" Kontextmenü wäre das Öffnen beliebiger Dateien mit dem Standard-Editor. Denn die vielen Textdateien wie beispielsweise readme.now, file_id.diz oder scandisk.log lassen sich nicht ohne weiteres mit einem Doppelklick öffnen - und wer will schon all diese Typen in die Registrierung mit aufnehmen? Hier die Lösung:

REGEDIT4
[HKEY_CLASSES_ROOT\*\shell\MitNpOeffnen]
@="Mit &Notepad öffnen"
[HKEY_CLASSES_ROOT\*\shell\MitNpOeffnen\command]
@="notepad.exe \"%1\""




Als Dateityp wurde bewusst der Stern verwendet. Dadurch hält der Anwender in den Kontextmenüs einer jeden Datei den Eintrag "Mit Notepad öffnen", so dass er fortan für alle Fälle gewappnet ist. Noch ein Wort zur letzten Listingzeile. Das erste und letzte Anführungszeichen darin grenzen die Zeichenkette an sich ein. Die Zeichenfolge \"%1\" wird bei der Eintragung in die Registrierung dann in "%1" aufgelöst. Für %1 wird später der Name des betreffenden Objekts eingesetzt. Da es sich dabei mitunter um einen langen Dateinamen mit Leerzeichen handeln kann, muss dieser in Anführungszeichen gesetzt werden - sonst wird der Name in mehrere Parameter aufgesplittet, und Notepad erhält fälschlicherweise nur den ersten Teilnamen.

Etwas Luxus

Alle bisher gezeigten Beispiele haben allerdings einen gemeinsamen Nachteil: Sie lassen sich nur mit Mühe wieder deinstallieren. Um der Sache diesen Stachel zu nehmen, kann auf die Hilfe von Windows-INF-Dateien zurückgegriffen werden:

[version]
signature="$CHICAGO$"

[DefaultInstall]
AddReg = OeffneDesktop.AddReg
CopyFiles = OeffneDesktop.CopyFiles.Inf

[DefaultUninstall]
DelReg = OeffneDesktop.AddReg
DelFiles = OeffneDesktop.CopyFiles.Inf

[SourceDisksNames]
55="Öffne Desktop", "", 1

[SourceDisksFiles]
ZeigDtop.Inf=55

[DestinationDirs]
OeffneDesktop.CopyFiles.Inf = 17

[OeffneDesktop.CopyFiles.Inf]
ZeigDtop.Inf

[OeffneDesktop.AddReg]
HKCR, Folder\shell\OeffneDesktop, , , "%OeffneDesktopMenuEntry%"
HKCR, Folder\shell\OeffneDesktop\command, , , "Explorer.exe %10%\Desktop"
HKCR, Drive\shell\OeffneDesktop, , , "%OeffneDesktopMenuEntry%"
HKCR, Drive\shell\OeffneDesktop\command, , , "Explorer.exe %10%\Desktop"
HKLM, %Uninstall%, DisplayName, , "%OeffneDesktopUninstEntry%"
HKLM, %Uninstall%, UninstallString, , "RunDll setupx.dll,
InstallHinfSection DefaultUninstall 132 %17%\ZeigDtop.Inf"

[Strings] OeffneDesktopMenuEntry = "Öffne &Desktop"
OeffneDesktopUninstEntry = "Öffne Desktop (Entfernen)"
Uninstall= "Software\Microsoft\Windows\CurrentVersion\ ... Uninstall\OeffneDesktop"

Richtig eingesetzt hat man damit nicht nur die Möglichkeit, die entsprechenden Registrierungseinträge vom System selbst vornehmen zu lassen, sondern auch eine entsprechende Deinstallationsroutine einzubauen. Die Installation startet man über den Eintrag "Installieren" des betreffenden Kontextmenüs - die Deinstallation über den Punkt Software in der Systemsteuerung.

Als Basis hierfür können die entsprechenden INF-Scripts von Explore here und DOS here aus den bereits genannten Power Toys dienen. Hierbei ist aber dringend auf ein paar Dinge zu achten, da sich das Script sonst nicht installieren lässt (und die Fehlermeldungen mehr als irreführend sind):
  • Die Namen von Registrierungsschlüsseln dürfen keine Umlaute oder Sonderzeichen enthalten, innerhalb von Zeichenketten (Sektion [Strings] und so weiter) sind diese aber erlaubt.
  • Der Dateiname der INF-Datei selbst darf kein langer Dateiname sein. Das Verzeichnis, in dem sich die INF-Datei befindet, darf ebenfalls keine langen Namen enthalten.
Zum Verständnis noch ein paar klärende Worte zu den in den INF-Beispielen verwendeten Standardvariablen:
  • HKLM bedeutet HKEY_LOCAL_MACHINE
  • HKCR bedeutet HKEY_CLASSES_ROOT
  • 10 steht für das Windows-Verzeichnis
  • 17 steht für das INF-Verzeichnis
  • 55 steht für das aktuelle Verzeichnis
Weitere Beispiele

Alle zu diesem Artikel gehörenden Beispieldateien sind hier im Anschluss als ZIP-Packerarchiv beziehbar. Zusätzlich sind u.a. noch folgende Kontextmenüerweiterungen enthalten:
  • startenc.inf für den Start des Norton Commanders in einem bestimmten Verzeichnis (in Anlehnung an DOS here)
  • neuordnr.inf zum (schnelleren) Anlegen eines neuen Ordners.


dreamer
Expert
Beitrag vom:
13-07-2007, 20:58:50

Bis mittlerweile schon auf Linux umgestiegen.

-----------------------------------------------------


paedubucher
Professonial
Beitrag vom:
04-11-2006, 16:52:33

@ dreamer

Falls du regedit.exe noch nicht gefunden hast, dann gehe einfach auf "Start - Ausführen" und gibt dort 'regedit' ohne Hochkomma ein. Dann klickst du auf OK und das Programm sollte erscheinen.

-----------------------------------------------------


dreamer
Expert
Beitrag vom:
26-12-2003, 14:37:31

Sieht schon sehr gut aus, aber wo zum Geier ist die Datie regedit.exe zu finden?

-----------------------------------------------------


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04508
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06246
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1154
Comments: 0