C# Mono - Крючок для клавиатуры низкого уровня
Я использую код, который я нашел на CodeProject.com для низкоуровневой зацепки клавиатуры. Единственная проблема заключается в том, что он использует внешние вызовы DLL, которые не работают в моно. Мне было интересно, если кто-нибудь знает способ выполнить то же самое, что и этот код, но будет ли работать как в Windows, используя.net, так и в Linux, используя моно?
Изменить: Уточнение того, что я пытаюсь сделать: я делаю приложение, похожее на Dashboard. Программа находится в системном трее, и когда пользователь нажимает горячую клавишу, она выскакивает все гаджеты. Таким образом, программа не имеет фокуса, поэтому обычно она не улавливает нажатий клавиш, поэтому я использую низкоуровневый хук клавиатуры и перехватываю две клавиши, которые пользователь определяет как горячие клавиши. Но я использую для этого вызов Windows DLL, который не работает в Linux с использованием моно. Поэтому мне интересно, есть ли способ сделать то же самое, но будет ли работать в Linux с использованием моно?
2 ответа
Невозможно получить такое поведение, используя только.Net. Вы должны использовать бинарный драйвер для каждой платформы, на которой вы работаете (Windows, Linux, Mac OS). Может быть возможно использовать только P/Invoke (определить, на какой ОС вы работаете, вызвать соответствующие системные библиотеки), чтобы вам не приходилось распространять "лишние" dll/so/dylib.
Не зная, что вы пытаетесь запечатлеть, трудно быть уверенным, что сработает для вас. Вы можете посмотреть на использование Application.AddMessageFilter.
Пример здесь: http://dn.codegear.com/article/30129