PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kontextmenü für bestimmten Dateityp erweitern


Gast103
2009-08-25, 10:25:38
Ich möchte mein Kontextmenü, wenn ich auf eine Datei mit der Dateierweiterung mdb klicke, um ein Programm erweitern.

Das soll so aussehen. Ich bin im Explorer, öffne das Kontextmenü mit rechtsklick auf eine mdb Datei und dort soll ein neuer Eintrag "Öffnen mit Programm X" auftauchen.

Wie mache ich das?

Danke für Eure Hilfe :)

Gast103
2009-08-25, 10:26:51
Das ganze soll unter Windows XP funktionieren.

Monger
2009-08-25, 13:31:14
Sorry, keine Ahnung. IRGENDWIE muss es selbstverständlich gehen, gibt ja etliche Plugins die das machen, aber ich vermute, das geht nur mit den nativen WinAPI Funktionen.

Was genau verwendest du eigentlich? C++? Kannst du mal ein Codebeispiel von dem posten, was du bereits zum laufen gekriegt hast?

Gast302
2009-08-25, 13:44:19
Hallo Monger und danke für Deine Antwort :).

Das Programm, dass ich starten will ist ein eigenes in Java programmiertes kleines Tool, aber das spielt alles keine Rolle, da das Kontextmenü eine reine Windows Sache ist. Hab mich wohl missverständlich ausgedrückt :).

Durch sehr langes suchen habe ich die Sache nun auch selbst gelöst.

Man geht in die Registirung, sucht sich seine Dateiendung und fügt seinen Programmnamen ein, z.B.
[HKEY_CLASSES_ROOT\.mdb\shell\MeinTollesProgramm]

Dann einfach noch den Programmaufruf dazu und schon geht es.
[HKEY_CLASSES_ROOT\.mdb\shell\MeinTollesProgramm\command]
@="C:\\Program Files\\java\\bin\\javaw.exe -jar C:\\MeinTollesProgramm\\MeinTollesProgramm.jar \"%1\""

Eigentlich sehr einfach, wenn man weiß wie.

_Gast
2009-08-25, 13:48:08
Eigentlich sehr einfach, wenn man weiß wie.Wenn man weiß wie, geht das noch viel einfacher:

Die Datei im Explorer mit der rechten Maustaste und gedrückter Shifttaste anklicken. "Öffnen mit..." wählen und das gewünschte Programm (ggf. mit "Durchsuchen...") auswählen. Wenn gewünscht, die Auswahl mit "Dateityp immer mit dem ausgewählten Programm öffnen" dauerhaft speichern.

creave
2009-08-25, 13:55:39
Wenn man weiß wie, geht das noch viel einfacher:

Die Datei im Explorer mit der rechten Maustaste und gedrückter Shifttaste anklicken. "Öffnen mit..." wählen und das gewünschte Programm (ggf. mit "Durchsuchen...") auswählen. Wenn gewünscht, die Auswahl mit "Dateityp immer mit dem ausgewählten Programm öffnen" dauerhaft speichern.


Das erweitert aber nicht das Kontextmenü, bzw. der Endanwender muss manuell vorgehen.
TS, wenn du mit deiner Lösung zufrieden bist dann ok, ansonsten geht das über einen ContextMenuHandler, CLSID und InprocServer32 - da sind dann auch Sub-Menus und solche Dinge möglich. Außerdem machst du durch die Zuteilung zu einer Klasse bekannt, was dein eigener Dateityp eigentlich ist, falls dieser nicht schon existiert.

Further reading @ msdn:

Creating Context Menu Handlers (http://msdn.microsoft.com/en-us/library/bb776881%28VS.85%29.aspx)
Defining a New File Type (http://msdn.microsoft.com/en-us/library/bb776870%28VS.85%29.aspx)
Extending Shortcut Menus (http://msdn.microsoft.com/en-us/library/bb776820%28VS.85%29.aspx)

_Gast
2009-08-25, 14:18:04
Das erweitert aber nicht das Kontextmenü, bzw. der Endanwender muss manuell vorgehen.Die Registryeinträge der Threadstarters erweitern das Kontextmenü auch nicht. Und ich hoffe doch schwer, dass sich der Endanwender nicht mit Registryeinträgen herumschlagen muss. Für Anwender schreibt man ein Installationsprogramm, das so etwas macht. Unter NSIS (http://nsis.sourceforge.net/Main_Page) reicht da beispielsweise einfach der Befehl "WriteRegStr".

@Threadstarter: Ist das Programm denn für Endanwender vorgesehen? Dann müsstest du das aber nochmal überarbeiten. Die Endung "mdb" ist bereits vergeben und wird beispielsweise von Microsoft für Access-Datenbanken genutzt. Da würde der Anwender kaum Freude haben, wenn nach der Installation deines Programms sein Access nicht mehr funktioniert.

Gast302
2009-08-25, 16:06:13
Als erstes vielen Dank für die vielen Antworten. Hab leider ein neues Problem, nämlich dass es unter Vista wie oben beschrieben nicht geht. Irgendwie bin ich nicht überrascht :D

Aber erst ein paar Worte zur Aufklärung @ gast_:

Dein in #5 beschriebener Vorschlag geht nicht, da man so keine Parameter übergeben kann. Muss ich aber. Außerdem wird das Kontextmenü nicht erweitern. und das Standardprogramm wird imho auch noch geändert. Fällt also komplett weg ;).

Und das der Dateityp mdb ist (also MS Access Datenbanken), ist gerade der Clou an der Sache. Mein Tool untersucht diese nämlich und zeigt einen übersichtlichen Dialog mit den ermittelten Infos. Davon abgesehen wäre es aber auch so egal, da die Kontexterweiterung gerade NICHT das Standardprogramm ändert. Ich glaube Du hast meine Intention nicht verstanden.
Denn wie gesagt, so wie oben geschrieben geht es eben doch, zumindest unter XP.

Nur leider nicht unter Vista .... ich werde mal die Links von creave druchlesen, evtl. fidnet sich dort die Lösung. Hört sich zumindest vielversprechen an. Danke dafür :).

Weitere Ideen nehm ich aber gerne an.

_Gast
2009-08-25, 17:04:32
Ich glaube Du hast meine Intention nicht verstanden.Ja, habe ich wohl falsch verstanden.

Aber würde es für deinen Anwendungszweck nicht reichen, eine Verknüpfung (mit Parametern) im Ordner "SendTo" anzulegen und das dann im Kontextmenü über "Senden an..." aufzurufen? Das müsste doch auch unter Vista funktionieren.

Gast302
2009-08-25, 19:04:47
Mittels SendTo funktioniert es auch - so hatte ich es auch zu erst.
Aber da das ersten nicht so professionell aussieht und zweitens doppelt so viele Klicks sind (nämlich 2) versuche ich es jetzt über das Kontextmenü.

Ich denke, die Lösung ist irgendwo in den Links von creave :).

Gast103
2009-09-08, 18:22:21
Nachtrag: ich habe es nicht geschafft, ein Icon in mein Kontextmenü einzufügen. Ich habe viel durchgelesen und wirklich sehr viel Zeit investiert aber die Sache ist alles andere als trivial. Und man findet dazu wirklich nichts im Netz.

Es würde mich wundern, wenn jemand eine Lösung beschreiben kann - aber trotzdem Danke an alle für die Hilfe :)

Sephiroth
2009-09-08, 21:30:04
Wenn ich das richtige verstehe, musst du beim dem Handler u.a. IContextMenu::QueryContextMenu implementieren. In dem Beispiel (http://msdn.microsoft.com/en-us/library/bb776881(VS.85).aspx) wird da InsertMenu (http://msdn.microsoft.com/en-us/library/ms647987(VS.85).aspx) aufgerufen, um den Eintrag zu erstellen/hinzuzufügen. Du musst dann den Typ auf MF_OWNERDRAW setzen und selbst erzeugen.

Das hier dürfte einigermaßen zur Anschauung dienen -> Menüs mit Icons (http://www.cpp-tutor.de/mfc/mfc/kap7/tut/tut5.htm)

noch was für die Linksammlung
Creating Shell Extension Handlers (http://msdn.microsoft.com/en-us/library/bb776797(VS.85).aspx)