Ren C# Hook-implementering
For å implementere systemkroker er det faktisk veldig enkelt, bare kall de tre Win32-API-ene. SetWindowsHookEx brukes til å sette opp hooks. (Sett opp et kort for å sjekke informasjonen du trenger)
CallNextHookEx brukes til å sende hooks (meldinger er viktige, så der de kommer fra, bør de gå tilbake dit du vil blokkere dem)
UnhookWindowsHookEx Avinstaller-kroker (avinstallasjon er veldig viktig, for mange fastlåste innstillinger vil føre til overbelastning)
Artikkelen "HOW TO: Setting Window Hooks in Visual C# .NET" beskriver det slik: Globale kroker støttes ikke i .NET-rammeverket Du kan ikke implementere globale kroker i Microsoft .NET-rammeverket. For å installere en global hook må hooken ha en native dynamic link library (DLL)-eksport slik at den kan settes inn i en annen prosess som må kalles inn i en gyldig og konsistent funksjon. Dette krever en DLL-eksport, som ikke støttes av .NET-rammeverket. Den administrerte koden har ikke konseptet med en uniform verdi for funksjonspekere, fordi disse funksjonene er dynamisk konstruerte proxyer. Jeg fant mye kode på Internett, og de fleste inneholder en C++ DLL for å identifisere DLL-en som inneholder subrutinen lpfn refererer til, noe som ser ut til å bekrefte denne påstanden.
Men i realiteten er dette ikke tilfelle, og den globale kroken kan implementeres ved hjelp av følgende kode: IntPtr pInstance = Marshal.GetHINSTANCE( Assembly.GetExecutingAssembly(). ManifestModule); Win32API.SetWindowsHookEx( WH_MOUSE_LL,m_MouseHookProcedure, pInstance, 0 ); Merk: ManifestModule-egenskapen er et nytt tillegg i .Net Framework 2.0, så når du fortsatt bruker . I Net Framework 1.x kan du bruke GetModules-metoden for å hente alle modulene til den nåværende assemblyen, og deretter bruke en av dem som parameter til GetHINSTAN-metoden for å hente riktig håndtakpeker.
|