Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 18171|Odgovoriti: 0

[Komunikacija] Čista implementacija C# hooka

[Kopiraj povezavo]
Objavljeno na 7. 02. 2019 21:10:23 | | |
Čista implementacija C# Hook

Za implementacijo sistemskih kljuk je pravzaprav zelo preprosto, preprosto pokliči tri Win32 API-je.
SetWindowsHookEx se uporablja za nastavitev kljuk. (Nastavite kartico, da preverite potrebne informacije)

CallNextHookEx se uporablja za posredovanje hookov (sporočila so pomembna, zato naj se vrnejo tja, kjer jih želite blokirati)




Odklopi WindowsHookEx Odstrani kljuke (odstranitev je zelo pomembna, preveč zataknjenih nastavitev povzroča zastoje)


Članek "KAKO nastaviti: Nastavitev okenskih kljuk v Visual C# .NET" to opisuje takole:
Globalni hooki niso podprti v .NET ogrodju
V Microsoft .NET ogrodju ne moreš implementirati globalnih hookov. Za namestitev globalnega hooka mora imeti hook izvorno izvozno knjižnico dinamičnih povezav (DLL), da ga je mogoče vstaviti v drug proces, ki ga je treba poklicati v veljavno in dosledno funkcijo. To zahteva izvoz DLL, ki ga .NET ogrodje ne podpira. Upravljana koda nima koncepta enotne vrednosti za kazalce funkcij, saj so te funkcije dinamično konstruirani proxyji.
Na internetu sem našel veliko kode, večina pa vsebuje C++ DLL za identifikacijo DLL-ja, ki vsebuje podprogram, na katerega se sklicuje lpfn, kar se zdi, da potrjuje to trditev.

V resnici pa temu ni tako, globalni hook pa je mogoče implementirati z naslednjo kodo:
IntPtr pInstance = Marshal.GetHINSTANCE( Assembly.GetExecutingAssembly(). ManifestModule );
Win32API.SetWindowsHookEx( WH_MOUSE_LL,m_MouseHookProcedure, pInstance, 0 );
Opomba: Lastnost ManifestModule je nova pridobitev v .Net Framework 2.0, tako da če še vedno uporabljate . V Net Framework 1.x lahko uporabite metodo GetModules za pridobitev vseh modulov trenutnega asemblerja, nato pa uporabite enega od njih kot parameter za metodo GetHINSTAN za ustrezno kazalko za ročaj.





Prejšnji:Delegat v C#
Naslednji:Uporaba kljukastih funkcij v programskih veščinah v C# - SetWindowsHookEx
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com