Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 18171|Răspunde: 0

[Comunicare] Implementare pură a hook-ului C#

[Copiază linkul]
Postat pe 07.02.2019 21:10:23 | | |
Implementare pură C# Hook

Pentru a implementa cârligele de sistem, este de fapt foarte simplu, doar să apelezi cele trei API-uri Win32.
SetWindowsHookEx este folosit pentru a configura hook-uri. (Setează un card pentru a verifica informațiile de care ai nevoie)

CallNextHookEx este folosit pentru a transmite hook-uri (mesajele sunt importante, așa că de unde provin ar trebui să se întoarcă acolo unde vrei să le blochezi)




UnhookWindowsHookEx Dezinstalează hook-urile (dezinstalarea este foarte importantă, prea multe setări blocate vor cauza congestie)


Articolul "HOW TO: Setting Window Hooks in Visual C# .NET" o descrie astfel:
Hook-urile globale nu sunt suportate în cadrul .NET
Nu poți implementa hook-uri globale în cadrul Microsoft .NET. Pentru a instala un hook global, hook-ul trebuie să aibă un export nativ de bibliotecă de legături dinamice (DLL), astfel încât să poată fi inserat într-un alt proces care trebuie apelat într-o funcție validă și consistentă. Aceasta necesită un export DLL, care nu este suportat de framework-ul .NET. Codul gestionat nu are conceptul de a avea o valoare uniformă pentru pointerii de funcție, deoarece aceste funcții sunt proxy-uri construite dinamic.
Am găsit mult cod pe Internet, iar majoritatea conțin un DLL C++ pentru a identifica DLL-ul care conține subrutina la care face referire lpfn, ceea ce pare să valideze această afirmație.

Dar, în realitate, acest lucru nu este cazul, iar cârligul global poate fi implementat folosind următorul cod:
IntPtr pInstance = Marshal.GetHINSTANCE( Assembly.GetExecutingAssembly(). ManifestModule );
Win32API.SetWindowsHookEx( WH_MOUSE_LL,m_MouseHookProcedure, pInstance, 0 );
Notă: Proprietatea ManifestModule este o adăugire nouă în .Net Framework 2.0, așa că atunci când încă folosești . În Net Framework 1.x, poți folosi metoda GetModules pentru a obține toate modulele din ansamblul curent, apoi să folosești unul dintre ele ca parametru pentru metoda GetHINSTAN pentru a obține handlerul corespunzător.





Precedent:Delegă în C#
Următor:Utilizarea funcțiilor hook în abilitățile de programare C# - SetWindowsHookEx
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com