Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 18171|Ответ: 0

[Связь] Чистая реализация крючка на C#

[Скопировать ссылку]
Опубликовано 07.02.2019 21:10:23 | | |
Чистая реализация крюка на C#

Чтобы реализовать системные крючки, на самом деле всё очень просто: просто вызваните три API Win32.
SetWindowsHookEx используется для настройки хуков. (Оформите карту, чтобы проверить нужную информацию)

CallNextHookEx используется для передачи хуков (сообщения важны, поэтому откуда они приходят, они должны возвращаться туда, где вы хотите их заблокировать)




UnhookWindowsHookEx Удалить крючки (удаление очень важно, слишком много зависших настроек приведёт к засорам)


Статья «КАК СДЕЛАТЬ: Установка оконных крючков в 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 для получения нужного указателя на дескриптор.





Предыдущий:Делегат в C#
Следующий:Использование функций-крючков в навыках программирования на C# — SetWindowsHookEx
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com