Ren C# Hook-implementering
For at implementere systemhooks er det faktisk meget simpelt, bare kald de tre Win32 API'er. SetWindowsHookEx bruges til at sætte hooks op. (Opret et kort for at tjekke de oplysninger, du har brug for)
CallNextHookEx bruges til at sende hooks (beskeder er vigtige, så hvor de kommer fra, bør de gå tilbage til det sted, du vil blokere dem)
UnhookWindowsHookEx Afinstaller hooks (afinstallation er meget vigtigt, for mange fastlåste indstillinger vil forårsage overbelastning)
Artiklen "HOW TO: Setting Window Hooks in Visual C# .NET" beskriver det således: Globale hooks understøttes ikke i .NET-frameworket Du kan ikke implementere globale hooks i Microsoft .NET-frameworket. For at installere en global hook skal hooken have en native dynamic link library (DLL) eksport, så den kan indsættes i en anden proces, der skal kaldes i en gyldig og konsistent funktion. Dette kræver en DLL-eksport, som ikke understøttes af .NET-frameworket. Den administrerede kode har ikke konceptet med en uniform værdi for funktionspointere, fordi disse funktioner er dynamisk konstruerede proxyer. Jeg fandt en masse kode på internettet, og de fleste indeholder en C++ DLL, der identificerer DLL'en med den subrutine, som lpfn henviser til, hvilket ser ud til at bekræfte denne påstand.
Men i virkeligheden er dette ikke tilfældet, og den globale hook kan implementeres ved hjælp af følgende kode: IntPtr pInstance = Marshal.GetHINSTANCE( Assembly.GetExecutingAssembly(). ManifestModule); Win32API.SetWindowsHookEx( WH_MOUSE_LL,m_MouseHookProcedure, pInstance, 0 ); Bemærk: ManifestModule-egenskaben er en ny tilføjelse i .Net Framework 2.0, så når du stadig bruger . I Net Framework 1.x kan du bruge GetModules-metoden til at hente alle modulerne i den aktuelle assembly og derefter bruge en af dem som parameter til GetHINSTAN-metoden for at få den relevante håndtagspointer.
|