Делаю приложение на WPF. Мне нужно, чтобы даже если окно не в фокусе, то оно все равно могло реагировать на нажатие клавиши Ctrl.
Вам нужно использовать глобальные системные хуки для перехвата нажатий клавиш.
В этой статье Henning Dieterichs создал для WPF класс для глобальных хуков, посмотрим как его использовать.
Копируем код основных классов из статьи. Далее (если нужна дополнительная логика) нам нужно унаследоваться от класса HotKey
. У меня получилось следующее:
public class CustomHotKey : HotKey
{
private Action<Key, ModifierKeys> _onHotKeyPressHandler;
public CustomHotKey(Key key, ModifierKeys modifiers, Action<Key, ModifierKeys> onHotKeyPressAction = null)
: base(key, modifiers, true)
{
_onHotKeyPressHandler = onHotKeyPressAction;
}
protected override void OnHotKeyPress()
{
_onHotKeyPressHandler?.Invoke(Key, Modifiers);
base.OnHotKeyPress();
}
}
Класс CustomHotKey
принимает в конструкторе клавиши, нажатие которых нужно перехватить, а также делегат, который будет вызываться для обработки нажатия этих клавиш.
Далее на событие Loaded
окна вешаем обработчик, в нем создаем экземпляр HotKeyHost
и указываем какие клавиши или сочетания клавиш нам нужно отслеживать.
Если вам нужно отслеживать нажатие Ctrl, то первым параметром передаем Key.None
, вторым - ModifierKeys.Control
и третьим - метод, который будет обрабатывать нажатие клавиш. Для примера я также добавил код для сочетания Ctrl + A.
Вот что вышло:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
var hotKeyHost = new HotKeyHost((HwndSource) PresentationSource.FromVisual(this));
hotKeyHost.AddHotKey(new CustomHotKey(Key.None, ModifierKeys.Control, OnHotkeyPress));
hotKeyHost.AddHotKey(new CustomHotKey(Key.A, ModifierKeys.Control, OnHotkeyPress));
}
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Есть коллекция объектов A в каждом из объектов A есть коллекция объектов B и есть просто объект BКак с помощью LINQ получить коллекцию объектов...
Я прикрутил к StackPanel скролл, но он не так пока работает как мне хотелось быОн стоит на месте, когда содержимого больше чем высота StackPanel
Я использую ssl но иногда на страницах сайта встречаются внешнее изображения, добавлены пользователями, с протоколом http, как записать в logtxt...