Puhas C# Hooki rakendus
Süsteemikonksude rakendamiseks on see tegelikult väga lihtne, lihtsalt kutsu kolm Win32 API-d. SetWindowsHookEx-i kasutatakse konksude seadistamiseks. (Seadista kaart, et kontrollida vajalikku infot)
CallNextHookEx-i kasutatakse konksude edastamiseks (sõnumid on olulised, seega peaksid need sealt tagasi minema, kust sa tahad neid blokeerida)
UnhookWindowsHookEx Desinstalli konksud (desinstallimine on väga oluline, liiga palju kinni jäänud seadeid põhjustab ummistust)
Artikkel "KUIDAS TEHA: Aknakonksude seadistamine visuaalses C# .NET-is" kirjeldab seda järgmiselt: Globaalsed konksud ei ole .NET raamistikus toetatud Microsoft .NET raamistikus ei saa globaalseid konksusid rakendada. Globaalse konksu paigaldamiseks peab konksul olema natiivse dünaamilise lingikogu (DLL) eksport, et see saaks sisestada teise protsessi, mis tuleb kutsuda kehtivasse ja järjepidevasse funktsiooni. Selleks on vaja DLL-eksporti, mida .NET raamistik ei toeta. Hallatud koodil puudub kontseptsioon, et funktsiooniosutite väärtus oleks ühtlane, sest need funktsioonid on dünaamiliselt konstrueeritud proksid. Leidsin internetist palju koodi ja enamik neist sisaldab C++ DLL-i, mis tuvastab DLL-i, mis sisaldab lpfn-i viidatud alamrutiini, mis näib seda väidet kinnitavat.
Kuid tegelikkuses see nii ei ole ning globaalset konksu saab rakendada järgmise koodiga: IntPtr pInstance = Marshal.GetHINSTANCE( Assembly.GetExecutingAssembly(). ManifestModule ); Win32API.SetWindowsHookEx( WH_MOUSE_LL,m_MouseHookProcedure, pInstance, 0); Märkus: ManifestModule omadus on uus lisand .Net Framework 2.0-s, nii et kui sa veel kasutad . Net Framework 1.x-s saad kasutada GetModules meetodit, et saada kõik praeguse assamblee moodulid ja seejärel kasutada üht neist GetHINSTAN meetodi parameetrina, et saada sobiv käepideme osut.
|