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


von Linker (Gast)


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 ?

von Peter II (Gast)


Lesenswert?

Linker schrieb:
> Weiß jemand, wie man sowas programmiert, d.h. wo im Developer Network
> http://msdn.microsoft.com
> man das findet ?

das ist nicht zu programmieren, sondern nur in der Registry einzutragen.

http://www.thewindowsclub.com/remove-click-context-menu-items-editors

von Stephan (Gast)


Lesenswert?

schon mal in anderen Programmen geschaut wie die das machen?
z.B.: TortoiseSVN

von Linker (Gast)


Lesenswert?

>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.

von bluppdidupp (Gast)


Lesenswert?


von Linker (Gast)


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.

von Georg (Gast)


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

von Georg (Gast)


Lesenswert?

Hallo,

für den Explorer ist sowas schon vorgesehen, fang mal da an zu lesen:

http://msdn.microsoft.com/en-us/library/windows/desktop/cc144067%28v=vs.85%29.aspx

und schreibe dir einen shortcut menu handler.

Georg

von Vlad T. (vlad_tepesch)


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"

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.