Czysta implementacja haka C#
Aby zaimplementować system hooks, jest to bardzo proste – wystarczy wywołać trzy API Win32. SetWindowsHookEx służy do konfigurowania haków. (Ustaw kartę, aby sprawdzić potrzebne informacje)
CallNextHookEx służy do przekazywania haków (wiadomości są ważne, więc skąd pochodzą, powinny wracać tam, gdzie chcesz je zablokować)
Odłącz WindowsHookEx Odinstaluj haki (odinstalowanie jest bardzo ważne, zbyt wiele zablokowanych ustawień powoduje zaciarki)
Artykuł "JAK TO: Setting Window Hooks in Visual C# .NET" opisuje to następująco: Globalne haki nie są obsługiwane w frameworku .NET Nie da się zaimplementować globalnych hooków w frameworku Microsoft .NET. Aby zainstalować globalny hak, hak musi mieć natywną bibliotekę dynamicznych łączeń (DLL), aby można go było wstawić do innego procesu, który musi być wywołany do ważnej i spójnej funkcji. Wymaga to eksportu DLL, który nie jest obsługiwany przez framework .NET. Kod zarządzany nie ma koncepcji posiadania jednolitej wartości wskaźników funkcji, ponieważ są one dynamicznie konstruowanymi proxy. Znalazłem dużo kodu w Internecie i większość z nich zawiera DLL C++ do identyfikacji DLL zawierającej podprogram wspomniany przez lpfn, co wydaje się potwierdzać to twierdzenie.
W rzeczywistości jednak tak nie jest, a globalny hak można zaimplementować za pomocą następującego kodu: IntPtr pInstance = Marshal.GetHINSTANCE( Assembly.GetExecutingAssembly(). ManifestModule ); Win32API.SetWindowsHookEx( WH_MOUSE_LL,m_MouseHookProcedure, pInstance, 0 ); Uwaga: Właściwość ManifestModule to nowy dodatek w .Net Framework 2.0, więc jeśli nadal używasz . W Net Framework 1.x możesz użyć metody GetModules, aby pobrać wszystkie moduły aktualnego asemblera, a następnie użyć jednego z nich jako parametru dla metody GetHINSTAN, aby uzyskać odpowiedni wskaźnik uchwytu.
|