Ren C# Hook-implementering
För att implementera systemkrokar är det faktiskt väldigt enkelt, bara kalla de tre Win32-API:erna. SetWindowsHookEx används för att sätta upp hooks. (Skapa ett kort för att kontrollera den information du behöver)
CallNextHookEx används för att skicka hooks (meddelanden är viktiga, så där de kommer ifrån bör de gå tillbaka dit du vill blockera dem)
UnhookWindowsHookEx Avinstallationskrokar (avinstallation är mycket viktigt, för många fastkilade inställningar orsakar trängsel)
Artikeln "HOW TO: Setting Window Hooks in Visual C# .NET" beskriver det så här: Globala hooks stöds inte i .NET-ramverket Du kan inte implementera globala krokar i Microsoft .NET-ramverket. För att installera en global hook måste hooken ha en inbyggd dynamic link library (DLL)-export så att den kan infogas i en annan process som behöver anropas i en giltig och konsekvent funktion. Detta kräver en DLL-export, vilket inte stöds av .NET-ramverket. Den hanterade koden har inte konceptet att ha ett enhetligt värde för funktionspekare, eftersom dessa funktioner är dynamiskt konstruerade proxyer. Jag hittade mycket kod på internet, och de flesta innehåller en C++ DLL för att identifiera DLL:n som innehåller subrutinen som lpfn syftar på, vilket verkar bekräfta detta påstående.
Men i verkligheten är detta inte fallet, och den globala kroken kan implementeras med följande kod: IntPtr pInstance = Marshal.GetHINSTANCE( Assembly.GetExecutingAssembly(). ManifestModule); Win32API.SetWindowsHookEx( WH_MOUSE_LL,m_MouseHookProcedure, pInstance, 0 ); Observera: ManifestModule-egenskapen är ett nytt tillägg i .Net Framework 2.0, så när du fortfarande använder . I Net Framework 1.x kan du använda GetModules-metoden för att hämta alla moduler i den aktuella assemblyn, och sedan använda en av dem som parameter till GetHINSTAN-metoden för att få rätt handle-pekare.
|