Windows-Registry: Explorer Shell Extension

Fee

Okay
20 April 2006
936
73
Ich versuche gerade in das Kontextmenü des Explorers, beim rechtsklick auf Bilddateien einen Eintrag hinzuzufügen, der ein bestimmtes Programm startet.
Da ich mich mit COM nicht auskenne, möchte ich das gerne über die Registry machen.
Das ganze funktioniert z.b. folgendermaßen:
Wenn ich
Code:
HKEY_CLASSES_ROOT\*\shell\testeintrag (= "demo eintrag")
HKEY_CLASSES_ROOT\*\shell\testeintrag\command (="notepad.exe")
anlege, erscheint beim Rechtsklick auf eine beliebige Datei der Eintrag "demo eintrag".
Das ganze funktioniert auch bei Ordnern:
Code:
HKEY_CLASSES_ROOT\Directory\shell\testeintrag (= "demo eintrag")
HKEY_CLASSES_ROOT\Directory\shell\testeintrag\command (="notepad.exe")

Mein Problem: Ich möchte den Eintrag nur bei Imagedateien. Jedoch kann ich nicht einfach einen Eintrag zu ".jpg" noch "jpegfile" anlegen, da dann nämlich nichts passiert. Da ich ".jpg" mit IrfanView verknüpft habe, müsste ich einen Shell-Eintrag unter HKEY_CLASSES_ROOT\IrfanView.jpg\shell machen, der dann auch angezeigt wird.

Jetzt möchte ich diesen Shelleintrag aber nicht nur auf meinem Computer sehen, sondern in eine Anwendung integrieren, die auf jedem Windowsrechner dann diesen Eintrag anzeigt. Ich versteh nicht ganz, warum die shell-Einträge unter "jpegfile" ignoriert werden und es ist wohl nicht wirklich möglich, die Schlüssel an jedes Programm anzupassen (es nutzen wohl kaum alle Irfanview ;) ).

Ich habe mir extra noch das Shell-Extension-Programm eines bekannten Imagehosters geladen, doch dieser legt auch nur einen Schlüssel in "jpegfile" an und wird bei mir nicht im Kontextmenü angezeigt.
Ich nutze Windows 7 x64, weiß nicht, ob der Eintrag auf anderen Version angezeigt wird.

Gibt es hierzu eine Lösung? Ich könnte zwar die ganze Registry nach einem jpg-Handler durchsuchen, jedoch würde der Eintrag dann ja verschwinden, wenn der User ein neues Grafikprogramm installiert und dieses als JPG-Handler einrichtet. (JPG in diesem Beitrag steht als Beispiel für einen Image-Dateityp).
 
Es sollte mit "jpegfile" gehen.

Vorgehen is immer:

  • HKEY_CLASSES_ROOT\.ext
  • Default-Value lesen => entspricht dem Schlüssel
  • HKEY_CLASSES_ROOT\schlüssel\shell
  • dort neuen Unterschlüssel und Handler eintragen
Hast du n Neustart von explorer.exe nach deiner Änderung gemacht?
 
  • HKEY_CLASSES_ROOT\.ext
  • Default-Value lesen => entspricht dem Schlüssel
Jop, da steht "jpegfile".
  • HKEY_CLASSES_ROOT\schlüssel\shell
  • dort neuen Unterschlüssel und Handler eintragen
Hast du n Neustart von explorer.exe nach deiner Änderung gemacht?

Steht drin, aber auch nach Neustart (explorer und danach auch ganzen PC) nichts.

Merkwürdig: Hab gerade mal auf meinem Notebook (auch Win7) in der Registry gestöbert, da steht unter "HKEY_CLASSES_ROOT\.jpg" (Defaultvalue) sogar "IrfanView.jpg" drin. Bei meinem PC steht "jpegfile", aber die Einträge unter jpegfile werden ignoriert.
 
Steht drin, aber auch nach Neustart (explorer und danach auch ganzen PC) nichts.
Explorer reicht. Vermutlich gibts auch ne WinAPI-Funktion, um die Einstellungen zu flushen, aber mir is da nix konkretes bekannt.
Merkwürdig: Hab gerade mal auf meinem Notebook (auch Win7) in der Registry gestöbert, da steht unter "HKEY_CLASSES_ROOT\.jpg" (Defaultvalue) sogar "IrfanView.jpg" drin.
Is komisch. Nach meinem Verständnis zählen dann die Einträge unter HKEY_CLASSES_ROOT\IrfanView.jpg\shell\.


Ich hab bei mir grade nachgesehen. Bei Windows7x64-Notebook ist "jpegfile" eingetragen.

Bei meinem XP-PC steht PhotoShop drinnen. Allerdings hab ich da unter HKEY_CLASSES_ROOT\.jpeg\OpenWithProgids Werte, die weitere Programme, u.a. auch "jpegfile" listen. Das scheint also der Kniff zu sein, um mehrere Programme an eine Erweiterung zu binden.

Ein Indiz mehr, dass es mit "jpegfile" auf alle Fälle gehen sollte.
 
Nach meinem Verständnis zählen dann die Einträge unter HKEY_CLASSES_ROOT\IrfanView.jpg\shell\.
Das tun sie auch, macht auch Sinn. Aber bei meinem PC steht da jpegfile, es zählen trotzdem nur die Einträge unter IrfanView.jpg
Bei meinem XP-PC steht PhotoShop drinnen. Allerdings hab ich da unter HKEY_CLASSES_ROOT\.jpeg\OpenWithProgids Werte, die weitere Programme, u.a. auch "jpegfile" listen. Das scheint also der Kniff zu sein, um mehrere Programme an eine Erweiterung zu binden.

Ein Indiz mehr, dass es mit "jpegfile" auf alle Fälle gehen sollte.

Unter OpenWithProgsids steht bei mir auch "jpegfile", aber die Shelleinträge scheinen Windows nicht zu interessieren ;).

Hab gerade mal etwas ausprobiert (am PC):
Ich habe eine Shell Extension nur unter "jpegfile" angelegt.
.jpg ist mit Irfanview verknüpft (also als Standardprogramm ausgewählt) => bei .jpg steht "jpegfile", Eintrag wird nicht angezeigt.
.jpg mit Windows-Fotoanzeige verknüpft => "jpegfile" - Einträge werden angezeigt!
.jpg mit Paint verknüpft => noch immer "jpegfile", Einträge werden aber nicht angezeigt.

Das macht irgendwie keinen Sinn. Auf meinem Notebook wird ja wenigstens noch IrfanView.jpg als Standardvalue bei ".jpg" angezeigt. Bei meinem PC ist es immer "jpegfile", egal welches Programm ich als Standardprogramm auswähle. Jedoch funktioniert dort ein Shelleintrag unter "jpegfile" nur dann, wenn ich Windows-Fotoanzeige als Standardprogramm für .jpg auswähle. ?!?

:ugly:

€dit:
Code:
[HKEY_CLASSES_ROOT\.jpeg]
"Content Type"="image/jpeg"
@="jpegfile"
"PerceivedType"="image"

[HKEY_CLASSES_ROOT\.jpeg\OpenWithList]

[HKEY_CLASSES_ROOT\.jpeg\OpenWithList\ehshell.exe]

[HKEY_CLASSES_ROOT\.jpeg\OpenWithList\Illustrator.exe]
@=""

[HKEY_CLASSES_ROOT\.jpeg\OpenWithProgids]
"jpegfile"=""
"IrfanView.jpg"=""

[HKEY_CLASSES_ROOT\.jpeg\PersistentHandler]
@="{098f2470-bae0-11cd-b579-08002b30bfeb}"

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

[HKEY_CLASSES_ROOT\.jpg]
"Content Type"="image/jpeg"
@="jpegfile"
"PerceivedType"="image"

[HKEY_CLASSES_ROOT\.jpg\OpenWithList]

[HKEY_CLASSES_ROOT\.jpg\OpenWithList\ehshell.exe]

[HKEY_CLASSES_ROOT\.jpg\OpenWithList\Illustrator.exe]
@=""

[HKEY_CLASSES_ROOT\.jpg\OpenWithProgids]
"jpegfile"=""
"IrfanView.jpg"=""

[HKEY_CLASSES_ROOT\.jpg\PersistentHandler]
@="{098f2470-bae0-11cd-b579-08002b30bfeb}"

Es macht dem übrigns absolut nichts aus, wenn ich den kompletten Schlüssel ".jpg" in ".jpgblub" umbenenne. Im Explorer ändert sich nichts. Und wenn ich "IrfanView.jpg" aus "OpenWithProgids" lösche, passiert auch nichts. Datei ist weiterhin mit Irfanview verknüpft.
 
Zuletzt bearbeitet: