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