Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 18171|Antwoord: 0

[Communicatie] Pure C# hook-implementatie

[Link kopiëren]
Geplaatst op 07-02-2019 21:10:23 | | |
Pure C# Hook-implementatie

Om systeemhooks te implementeren is het eigenlijk heel eenvoudig: roep gewoon de drie Win32 API's aan.
SetWindowsHookEx wordt gebruikt om hooks op te zetten. (Maak een kaart aan om de informatie die je nodig hebt te controleren)

CallNextHookEx wordt gebruikt om hooks door te geven (berichten zijn belangrijk, dus waar ze vandaan komen, moeten ze teruggaan naar waar je ze wilt blokkeren)




UnhookWindowsHookEx Uninstall hooks (verwijderen is erg belangrijk, te veel vastzittende instellingen zorgen voor congestie)


Het artikel "HOW TO: Setting Window Hooks in Visual C# .NET" beschrijft het als volgt:
Globale hooks worden niet ondersteund in het .NET-framework
Je kunt geen globale hooks implementeren in het Microsoft .NET framework. Om een globale hook te installeren, moet de hook een native dynamic link library (DLL) export hebben zodat deze in een ander proces kan worden ingevoegd dat in een geldige en consistente functie moet worden aangeroepen. Dit vereist een DLL-export, die niet wordt ondersteund door het .NET-framework. De beheerde code heeft niet het concept van een uniforme waarde voor functiepointers, omdat deze functies dynamisch geconstrueerde proxies zijn.
Ik vond veel code op internet, en de meeste bevatten een C++ DLL om de DLL te identificeren met de subroutine waarnaar lpfn verwijst, wat deze bewering lijkt te bevestigen.

Maar in werkelijkheid is dit niet het geval, en kan de globale hook worden geïmplementeerd met de volgende code:
IntPtr pInstance = Marshal.GetHINSTANCE( Assembly.GetExecutingAssembly(). ManifestModule);
Win32API.SetWindowsHookEx( WH_MOUSE_LL,m_MouseHookProcedure, pInstance, 0 );
Opmerking: De ManifestModule-eigenschap is een nieuwe toevoeging in .Net Framework 2.0, dus wanneer je nog steeds gebruikt. In Net Framework 1.x kun je de GetModules-methode gebruiken om alle modules van de huidige assembly te krijgen, en vervolgens één daarvan als parameter gebruiken voor de GetHINSTAN-methode om de juiste handle-pointer te krijgen.





Vorig:Delegate in C#
Volgend:Gebruik van hook-functies in C#-programmeervaardigheden - SetWindowsHookEx
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com