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

Gast #3881844
Lesenswert?
• ▲
▼
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 #3882221
Lesenswert?
• ▲
▼
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 #3882356
Lesenswert?
• ▲
▼
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
#3883500
Lesenswert?
• ▲
▼
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren