C# Mono — низкоуровневый перехват клавиатуры

StackOverflow https://stackoverflow.com/questions/137893

  •  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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top