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