Windows=Explorer: Rechte-Maus-Taste-Menü selbst erweitern

Gast #3881844
Hallo,
ich würde gerne ein kleines Programm schreiben, welches mit 2 
verschiedenen Dateien arbeitet. In der Handhabung würde ich es gerne 
vergleichbar mit Diff-Programmen machen:

Ich suche die erste Datei und markiere sie. Das re.Maustaste-Menü zeigt 
mir die Möglichkeit an: "MyProg: choose 1st file".

Dann gehe zur 2. Datei (verschiedene Filename-Extension) und das Menü 
zeigt an:  "MyProg: choose 2nd file".
Dann wird mein Programm (C mit Visual Studio) aufgerufen mit den beiden 
Pfaden der selektieren Dateien.

Weiß jemand, wie man sowas programmiert, d.h. wo im Developer Network
http://msdn.microsoft.com
man das findet ?
Gast
>schon mal in anderen Programmen geschaut wie die das machen?
>z.B.: TortoiseSVN

"Beyond Compare 3" habe ich zur Verfügung.
Aber da sind die Reg-Einträge eher umfangreich und verwirrend.
Gast
So trivial ist das nicht.
Eigentlich hab ich's ja oben genau beschrieben.

Der Explorer/Menüverwaltung braucht hier eine State-Maschine !

Wenn das erste File angewählt werde, kann der User weiter browsen und 
das 2. File suchen.
Wenn das dann gewählt wird, nimmt der Explorer das gemerkte 1. File und 
das eben selektierte 2. File und ruft das Programm auf.
Gast
Linker schrieb:
> Der Explorer/Menüverwaltung braucht hier eine State-Maschine !

Das geht natürlich mit den üblichen Windows-Mechanismen: du kannst dich 
mit einem systemweiten Hook in das Aufrufen von Kontextmenüs einklinken 
und dann selbst entscheiden, was dort zusätzlich angeboten wird - 
vorausgesetzt deine Software bzw. ein Teil davon läuft, d.h. du musst 
das als Dienst installieren. Trivial ist es allerdings nicht.

Georg
Linker schrieb:
> Der Explorer/Menüverwaltung braucht hier eine State-Maschine !
>
> Wenn das erste File angewählt werde, kann der User weiter browsen und
> das 2. File suchen.
> Wenn das dann gewählt wird, nimmt der Explorer das gemerkte 1. File und
> das eben selektierte 2. File und ruft das Programm auf.


Vom Prinzip her geht das auch in einfach, ohne dienste, hooks und 
komplizierte (ganz ohne gehts nicht) Registry-Einträge:

du erzeugst ein Programm, was den Kommandozeilenparameter (der 
übergebene Dateipfad) nimmt und mit einem Zeitstempel in eine Datei 
schreibt (dein appdata-verzeichnis) und sich beendet.

Wird das Programm aufgerufen, öffnet es diese Datei, schaut sich den 
Zeitstempel an, und wenn sie nah genug beieinander liegen, interpretiert 
es die Aktionen (die gespeicherte und die aktuelle) als zusammengehörig 
und startet die Gui mit dem Vergleich und löscht den Dateiinhalt. Liegen 
sie zu weit auseinander, wird der alte Eintrag durch den aktuellen 
ersetzt.

Damit das aus dem Kontextmenü funktioniert, musst du in der Registry 
unter
"HKEY_CLASSES_ROOT\*\shell" einen neuen Schlüssel anlegen, dessen 
defaulteintrag im Kontextmenu angezeigt wird.
darunter legst du einen weiteren Schlüssel "command" an, dessen 
defaultwert
> "Pfad/myProgramm.exe" "%1"
sein sollte.


Es geht natürlich auch schöner. einige Dateivergleichsprogramme 
registrieren ja eigene Kontextmenuhandler, wie das geht weiß ich nicht 
genau.
mir haben bisher immer das "senden an"-Menü und die oben beschriebene 
Vorgehensweise gereicht.

Als reg datei sieht das dann zB so aus:
1
Windows Registry Editor Version 5.00
2

3
[HKEY_CLASSES_ROOT\*\shell\PathToClipboard]
4
@="Path -> Clipboard"
5

6
[HKEY_CLASSES_ROOT\*\shell\PathToClipboard\command]
7
@="C:\\tools\\PathToClipboard.exe %1"

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.