Ich weiß, dass es möglich ist, das Kontextmenü der Standarddatei zu erweitern, aber gibt es eine Möglichkeit, dem systemweiten Textbox-Kontextmenü Elemente hinzuzufügen?
Dies würde so sein, dass das neue Element in jedem Textfeld erscheint, das ein Benutzer irgendwo in Windows eingeben kann?
Zum Beispiel können Sie solche Funktionen hinzufügen, um den ausgewählten Text nach einer Rechtschreibprüfung zu durchsuchen.
Das ist technisch unmöglich mit C #.
Stellen wir uns die nächste Situation vor. Angenommen, Sie schreiben erfolgreich Ihre verwaltete Erweiterung und "erweitert" jedes Textfeld-Kontextmenü im System. Und natürlich sollten Sie jeden neuen Menüeintrag, den Sie hinzugefügt haben, bearbeiten. und um dies zu erreichen, sollten Sie Ihren verwalteten Code jedem Prozess mit Textfeld hinzufügen und sein WindProc
ersetzen. OK, angenommen, es gibt eine verwaltete App im System, die für die .net-Version geschrieben wurde, die sich von der Version unterscheidet, die Sie für Ihre Erweiterung verwendet haben. In diesem Fall würden Sie einen kritischen Fehler während der Erweiterungsinjektion bekommen, da pro Prozess nur eine Version von .net geladen werden kann. Daher gibt es keine Möglichkeit, eine robuste verwaltete Low-Level-Hook- oder Shell-Erweiterung zu schreiben. Von hier :
Globale Hooks werden nicht in der .NET Framework
Mit Ausnahme der WH_KEYBOARD_LL Low-Level-Hook und die WH_MOUSE_LL Low-Level-Hook, können Sie nicht implementieren globale Hooks in der Microsoft NET Framework. So installieren Sie a global hook, ein hook muss einen nativen haben DLL-Export, um sich in einem anderen zu injizieren Prozess, der eine gültige, erfordert konsistente Funktion zum Aufruf. Dies Verhalten erfordert einen DLL-Export. Das .NET Framework unterstützt keine DLL Exporte. Verwalteter Code hat kein Konzept eines konsistenten Werts für eine Funktion Zeiger, weil diese Funktion Zeiger sind Proxies, die gebaut werden dynamisch.Es werden Low-Level-Hook-Prozeduren aufgerufen auf dem Thread, der den Haken installiert hat. Low-Level-Hooks erfordern dies nicht Die Hook-Prozedur wird in a implementiert DLL.
Sie können auch dies Artikel und erkunde, warum du keine verwalteten Shell-Erweiterungen schreiben solltest.
Übernehmen Sie das Textfeld, das Sie verwenden möchten, und fügen Sie dort den Standardwert hinzu. Verwenden Sie Ihre Klasse anstelle der Textfeldklasse.
Sie müssten einen Maus-Hook hinzufügen
>Und dann erscheint ein Kontextmenü, wenn das Fenster / Steuerelement, auf das Sie klicken, ein Textfeld ist.
Dies kann (und wird wahrscheinlich) bereits vorhandene Kontextmenüs beeinträchtigen, weil Sie sie verstecken oder mit ihnen kollidieren werden.
(Ein schrecklicher Plan aber ...)
Rufen Sie die Bind-Methode mit dem Formular- und Kontextmenü auf.
%Vor%Wenn Sie ein dynamisches Textfeld hinzufügen, legen Sie das am Anfang der Bind-Methode ab:
%Vor%Dies führt dazu, dass die Bind-Methode immer dann aufgerufen wird, wenn dem Formular oder einem anderen Steuerelement ein Steuerelement hinzugefügt wird.
Tags und Links c# windows operating-system contextmenu