Grynas C# kabliuko įgyvendinimas
Norėdami įdiegti sistemos kabliukus, tai iš tikrųjų labai paprasta, tiesiog paskambinkite trims Win32 API. "SetWindowsHookEx" naudojamas kabliukams nustatyti. (Nustatykite kortelę, kad patikrintumėte reikiamą informaciją)
CallNextHookEx naudojamas kabliukams perduoti (pranešimai yra svarbūs, todėl ten, iš kur jie ateina, jie turėtų grįžti ten, kur norite juos užblokuoti)
AtkabinkiteWindowsHookEx Pašalinkite kabliukus (pašalinimas yra labai svarbus, per daug įstrigusių nustatymų sukels perkrovą)
Straipsnyje "KAIP: Langų kabliukų nustatymas Visual C# .NET" tai apibūdinama taip: Visuotiniai kabliukai nepalaikomi .NET sistemoje Negalite įdiegti visuotinių kabliukų Microsoft .NET sistemoje. Norint įdiegti visuotinį kabliuką, kabliukas turi turėti vietinę dinaminių nuorodų bibliotekos (DLL) eksportą, kad jį būtų galima įterpti į kitą procesą, kurį reikia iškviesti į galiojančią ir nuoseklią funkciją. Tam reikalingas DLL eksportavimas, kurio nepalaiko .NET sistema. Valdomas kodas neturi vienodos funkcijų rodyklių reikšmės koncepcijos, nes šios funkcijos yra dinamiškai sukonstruoti tarpiniai serveriai. Internete radau daug kodo, ir daugumoje jų yra C++ DLL, skirtas identifikuoti DLL, kuriame yra lpfn nurodyta paprogramė, o tai, atrodo, patvirtina šį teiginį.
Tačiau iš tikrųjų taip nėra, o visuotinį kabliuką galima įgyvendinti naudojant šį kodą: IntPtr pInstance = Marshal.GetHINSTANCE( Assembly.GetExecutingAssembly(). ManifestModule ); Win32API.SetWindowsHookEx( WH_MOUSE_LL,m_MouseHookProcedure, pInstance, 0 ); Pastaba: Ypatybė ManifestModule yra naujas ".Net Framework 2.0" papildymas, taigi, kai vis dar naudojate . Net Framework 1.x galite naudoti GetModules metodą, kad gautumėte visus dabartinio mazgo modulius, o tada vieną iš jų naudoti kaip GetHINSTAN metodo parametrą, kad gautumėte atitinkamą rankenėlės žymeklį.
|