2009-12-03 5 views
33

Ich möchte ein kleines Tool schreiben, dass die folgende tut:in Windows Explorer Kontextmenü Integration

Wenn Sie direkt mit einer bestimmten Dateierweiterung das Kontextmenü des Windows Explorer auf eine Datei klicken zeigt einen zusätzlichen Eintrag.

Wenn Sie auf diesen Eintrag klicken, wird eine bestimmte EXE mit dieser Datei als einer ihrer Parameter gestartet.

Ich möchte C# /. NET 2.0 dafür verwenden. Wenn es nicht möglich ist, könnte ich es auch mit C++/Win32 machen.

Meine Fragen sind:

  1. Ist es möglich, mit C# .NET 2.0?
  2. Was sind die notwendigen Funktionen für die Integration in das Windows Explorer-Kontextmenü?
  3. Wie kann ich das dauerhaft machen? (Ich möchte dieses Tool nicht nach jedem Neustart neu starten)
  4. Worauf muss ich besonders achten? (anderes Betriebssystem, Sicherheitsberechtigungen, etc.)

Antwort

4

Alles, was Sie tun müssen, ist einige Sachen zur Registrierung hinzuzufügen. Also können Sie das mit .NET 2.0 machen. Hier ist eine example of how to add Edit with Notepad.

% 1 ist die ausgewählte Datei, wenn ich mich richtig erinnere.

+2

Dies funktioniert nicht unter Vista und Win7. Nur unter XP und 2000. Ich weiß nicht warum. –

+1

Ich denke, die Registry-Pfade sind unterschiedlich, aber es sollte immer noch funktionieren: http://www.vistax64.com/tutorials/89829-start-menu-customize-context-menu.html –

22

Sie müssen auf die Registrierung zugreifen und einen Schlüssel unter root\\File\\shell oder root\Folder\\shell hinzufügen, abhängig davon, welche Elemente der Menüeintrag sichtbar sein soll.

Versuchen Sie this article at CodeProject, es ist sehr nützlich.

Bearbeiten: Es gibt another article here, die helfen können.

+0

http://www.codeproject.com /KB/cs/dateparser.aspx – Kiquenet

+0

+1 für den Link zum großen Projekt 'einfache Shell-Kontextmenü'. –

+0

Immer noch nützlich, danke Mark –

3

Es wird übrigens nicht unterstützt, .NET für Shell-Erweiterungen zu verwenden, da es derzeit nicht möglich ist, mehrere Laufzeitversionen im selben Prozess zu hosten (.NET 4 hebt diese Einschränkung auf).

Betrachten Sie den Fall, wo Sie zwei Shell-Erweiterungen haben; eine für .NET 3.5, eine für .NET 1. Welche Laufzeit wird in Ihren Prozess geladen? Nun, es ist mehr oder weniger zufällig - es hängt davon ab, welche Shell-Erweiterung zuerst geladen wird. Manchmal ist es die 2.0-Laufzeit, manchmal die 1.1-Laufzeit.

Dies ist auch ein Problem, wenn ein .NET-Programm gemeinsame Dateidialoge erstellt; Ihre Shell-Erweiterung wird möglicherweise geladen oder nicht, und kann möglicherweise nicht mit der richtigen Laufzeitversion ausgeführt werden.

Als solche, wenn Sie die Shell extension route gehen, sollten Sie native C++/COM/Win32 verwenden.

+0

Die neueste .Net 4.0-Laufzeit unterstützt das gleichzeitige Laden der .NET 4.0-Laufzeit (und aller zukünftigen Laufzeiten) mit früheren .Net-Laufzeiten. Siehe folgenden Auszug aus http://msdn.microsoft.com/en-us/magazine/ee819091.aspx "Mit der Möglichkeit, mehrere Laufzeiten im Prozess mit anderen Laufzeit zu haben, können wir jetzt allgemeine Unterstützung für das Schreiben von verwalteten anbieten Shell-Erweiterungen - selbst diejenigen, die mit beliebigen Anwendungen auf dem Rechner laufen. " – logicnp

Verwandte Themen