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

Ansehen: 18171|Antwort: 0

[Kommunikation] Reine C#-Hook-Implementierung

[Link kopieren]
Veröffentlicht am 07.02.2019 21:10:23 | | |
Reine C# Hook-Implementierung

Um Systemhooks zu implementieren, ist es tatsächlich sehr einfach, man ruft einfach die drei Win32-APIs auf.
SetWindowsHookEx wird verwendet, um Hooks einzurichten. (Richte eine Karte ein, um die benötigten Informationen zu überprüfen)

CallNextHookEx wird verwendet, um Hooks weiterzugeben (Nachrichten sind wichtig, daher sollten sie dorthin zurückgehen, wo du sie blockieren möchtest).




UnhookWindowsHookEx Deinstall-Hooks (Deinstallation ist sehr wichtig, zu viele festhängende Einstellungen führen zu Überlastungen)


Der Artikel "HOW TO: Setting Window Hooks in Visual C# .NET" beschreibt es wie folgt:
Globale Hooks werden im .NET-Framework nicht unterstützt
Du kannst globale Hooks im Microsoft .NET-Framework nicht implementieren. Um einen globalen Hook zu installieren, muss der Hook einen nativen Dynamic Link Library (DLL)-Export haben, damit er in einen anderen Prozess eingefügt werden kann, der in eine gültige und konsistente Funktion aufgerufen werden muss. Dies erfordert einen DLL-Export, der vom .NET-Framework nicht unterstützt wird. Der verwaltete Code hat nicht das Konzept eines einheitlichen Werts für Funktionszeiger, da diese Funktionen dynamisch konstruierte Proxys sind.
Ich habe viel Code im Internet gefunden, und die meisten enthalten eine C++-DLL, um die DLL mit der von lpfn genannten Unterroutine zu identifizieren, was diese Behauptung zu bestätigen scheint.

In Wirklichkeit ist dies jedoch nicht der Fall, und der globale Hook kann mit folgendem Code implementiert werden:
IntPtr pInstance = Marshal.GetHINSTANCE( Assembly.GetExecutingAssembly(). ManifestModule);
Win32API.SetWindowsHookEx( WH_MOUSE_LL,m_MouseHookProcedure, pInstance, 0 );
Hinweis: Die ManifestModule-Eigenschaft ist eine neue Ergänzung im .Net Framework 2.0, also wenn Sie noch verwenden. In Net Framework 1.x kann man die Methode GetModules verwenden, um alle Module der aktuellen Assembly zu erhalten und dann eines davon als Parameter für die GetHINSTAN-Methode verwenden, um den passenden Handle-Zeiger zu erhalten.





Vorhergehend:Delegierte in C#
Nächster:Verwendung von Hook-Funktionen in C#-Programmierfertigkeiten – SetWindowsHookEx
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