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