Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 17250|Antwort: 0

[Tipps] Verwendung von Hook-Funktionen in C#-Programmierfertigkeiten – SetWindowsHookEx

[Link kopieren]
Veröffentlicht am 07.02.2019 21:12:59 | | |
Wie Sie wissen: C# ist eine Begleitsprache zur .NET Framework-Plattform, und es ist nicht möglich, globale Hooks mit eigenen Bibliotheken und Compiler-Provisionen zu implementieren. In der Praxis gelten jedoch Aufrufe zu unmanaged Code in C#, wobei die DllImport-Eigenschaft verwendet wird, um Methoden in der unmanaged Code-Bibliothek zu referenzieren. Hook-Funktionen existieren in user32.dll, und der Funktionsprototyp sieht wie folgt aus:

HHOOK WINAPI SetWindowsHookEx(

__in int idHook,

__in HOOKPROC lpfn,

__in BEISPIEL hMod,

__in DWORD dwThreadId);

Es kann verwendet werden, um eine bestimmte Art von Nachrichtenabfangverfahren mit dem Betriebssystem (Windows) zu registrieren, zum Beispiel können wir einen Hook registrieren, um globale Tastaturnachrichten zu blockieren, sodass alle Tastendruck- und Lift-Ereignisse von uns wahrgenommen und verarbeitet werden können (es ist nicht ausgeschlossen, dass es einen Frontend-Hook gibt, um die Nachricht abzuwerfen).

Wir können diese Funktion in C# referenzieren, indem wir sie folgendermaßen deklarieren:

  [DllImport("user32.dll")]
        öffentliche statische externe int SetWindowsHookEx(
            HookType idHook,
            HookProc lpfn,
            IntPtr hInstance,
            int threadId
            );

Es ist erwähnenswert, dass die oben genannten HookType und HookProc meine benutzerdefinierten Typen sind, was nicht wichtig ist (weil das Programm beim Ausführen eine Speicheradresse übergibt), aber es muss bestimmte Spezifikationen erfüllen.

Die Parameter der Funktion von oben nach unten sind:

  idHook-Typ, der hier durch ein geformtes Enum dargestellt wird
     LPFN-Rückruffunktion, wenn Hooks ins Spiel kommen
     hInstance-Modulhandle der Anwendungsinstanz (meist der Modulhandle der Anwendungsinstanz, in der sich Ihre Hook-Callback-Funktion befindet)
       threadIdDie Identifikatorin des Threads, der mit der installierten Hook-Unterroutine verknüpft ist

Es gibt verschiedene Arten von Hooks:
Wir verwenden in der Regel 13, um Tastaturnachrichten zu blockieren, und 14, um Mausmeldungen zu blockieren.

Die Deklaration der Callback-Funktion Wir müssen Delegierte in C# verwenden, und die Deklaration lautet wie folgt:
    öffentlicher Delegierter int HookProc (int nCode, int wParam, IntPtr lParam);

Der Top-down-Parameter bedeutet, dass der von der nCode-Hook-Kette zurückgegebene Parameter gegeben wird, 0 bedeutet, dass diese Nachricht (durch den vorherigen Hook) verworfen wird, und nicht-0 bedeutet, dass diese Nachricht weiterhin gültig bleibt

wParam-Nachrichtenparameter

lParam-Nachrichtenparameter

Es ist erwähnenswert, dass wParam und lParam verschiedene Arten unterschiedlicher Nachrichtentypen sind, aber die Typen von wParam können grob durch folgende Aufzählung dargestellt werden:
lParam wird im Allgemeinen als Struktur gekapselt, die je nach Art der Nachricht variiert; die folgenden beiden Strukturen sind die lParam-Struktur aus Maus- und Tastaturnachrichten:
Wenn wir die oben genannten Informationen verstehen, haben wir ein grundlegendes Verständnis der C#-Implementierung von Hook-Funktionen und achten dann auf einige Fragen:

1. Hooks benötigen viele Ressourcen und sollten rechtzeitig abgebrochen werden, wenn sie nicht verwendet werden, was die UnhookWindowsHookEx-Funktion erfordert

2. Aus Höflichkeit sollte der Hook das Verarbeitungsergebnis des nächsten Hakens zurückgeben, nicht nur das Verarbeitungsergebnis des aktuellen Hakens allein (verwenden Sie CallNextHookEx, um den nächsten Hook aufzurufen, da der Hook zuerst gesetzt wird und dann in Kraft tritt, sodass dies geschieht, um die normale Lieferung der Hakenkette sicherzustellen).

3. Der hInstance im Parameter der Hook-Funktion ist nur dort, wo sich die Callback-Funktion des aktuellen Hooks befindet, und die korrekte Adresse muss angegeben sein

4. Da der Delegierte verwendet wird, sollte sichergestellt werden, dass die Speicheradresse des Delegierten (Verweis auf die Methode) nicht gestört wird, andernfalls gibt es eine Ausnahme, wenn der Hook ausgeführt wird



Du kannst das Beispielprogramm herunterladen, das ich geschrieben habe, aber mein Programm benötigt folgende Hauptpunkte:

1. Ich habe die Implementierung von Hooks blockiert und nur die Nachrichtenabfangung und -verarbeitung von Tastatur und Maus geöffnet (die Nutzungsmethode ist dieselbe wie bei den WinForm-Maus- und Tastaturereignissen in C#), und man kann auch andere öffnen

2. Ich habe den Hook so entworfen, dass er im Singleton-Modus ist, du kannst ihn abbrechen

3. Aufgrund bestimmter Eindringlinge in das Betriebssystem kann Antivirensoftware als riskant gemeldet werden

4. Der Code ist schlecht geschrieben, mach dich damit zufrieden......



Schließlich besteht der Unterschied zwischen Programmiertechnologie und -sprache darin, dass ihre Compiler und Nutzer unterschiedlich sind, Menschen, die C verwenden, nicht als höher als diejenigen mit Java bezeichnet werden können, und Technologie sich nicht unbedingt in Pointern, Matrizen, Datenstrukturen widerspiegelt, solange Menschen Computerprinzipien, Kompilierungsprinzipien, Betriebssystemprinzipien usw. verstehen. Natürlich ist es gut, dass jeder seine eigene Lieblingssprache und übliche Programmiermethoden hat.





Vorhergehend:Reine C#-Hook-Implementierung
Nächster:【Jiangshi WeChat Multi-Open】WeChat Scancode Optionaler Login|Unbegrenztes Multi-Open|Login-Speicherkonfiguration
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com