Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 18171|Відповідь: 0

[Зв'язок] Реалізація чистого C# hook

[Копіювати посилання]
Опубліковано 07.02.2019 21:10:23 | | |
Реалізація чистого C# Hook

Щоб реалізувати системні хуки, це насправді дуже просто — просто зателефонуйте трьома API Win32.
SetWindowsHookEx використовується для налаштування хуків. (Оформіть картку для перевірки потрібної інформації)

CallNextHookEx використовується для передачі хуків (повідомлення важливі, тому там, звідки вони надходять, вони мають повертатися туди, де ви хочете їх заблокувати)




Відключіть WindowsHookEx Видалення гачків (видалення дуже важливо, занадто багато застряглих налаштувань призведе до перевантаження)


Стаття «ЯК ЗРОБИТИ: Встановлення віконних гачків у Visual C# .NET» описує це так:
Глобальні гачки не підтримуються у фреймворку .NET
Ви не можете реалізувати глобальні гачки у фреймворку Microsoft .NET. Для встановлення глобального гачка він повинен мати нативний експорт з динамічної бібліотеки посилань (DLL), щоб його можна було вставити в інший процес, який потрібно викликати у коректну та послідовну функцію. Для цього потрібен експорт DLL, який не підтримується фреймворком .NET. Керований код не має концепції однорідного значення для вказівників функцій, оскільки ці функції є динамічно побудованими проксі.
Я знайшов багато коду в Інтернеті, і більшість з них містять C++ DLL для ідентифікації DLL, що містить підпрограму, на яку посилається lpfn, що, здається, підтверджує це твердження.

Але насправді це не так, і глобальний гачок можна реалізувати за допомогою наступного коду:
IntPtr pInstance = Marshal.GetHINSTANCE( Assembly.GetExecutingAssembly(). ManifestModule );
Win32API.SetWindowsHookEx( WH_MOUSE_LL,m_MouseHookProcedure, pInstance, 0 );
Примітка: властивість ManifestModule — це нове доповнення в .Net Framework 2.0, тож коли ви ще використовуєте . У Net Framework 1.x ви можете використати метод GetModules, щоб отримати всі модулі поточної асембли, а потім використати один із них як параметр для методу GetHINSTAN, щоб отримати відповідний вказівник на handle.





Попередній:Делегат у C#
Наступний:Використання функцій-гачків у навичках програмування на C# - SetWindowsHookEx
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com