Определите горячую клавишу всего приложения в смешанном приложении wpf / win32 - PullRequest
4 голосов
/ 01 декабря 2010

У меня есть приложение WPF (призма), которое использует множество других сборок WPF и даже библиотеки win32, содержащие другие окна (wpf и win32).

Когда пользователь нажимает функциональную клавишу (F2-F12) Я хочу открыть специальные программные функции.

Примерно так:

RoutedCommand commandF4 = new RoutedCommand();
commandF4.InputGestures.Add(new KeyGesture(Key.F4));
Application.Current.MainWindow.CommandBindings.Add(new CommandBinding(commandF4, CallCommandF4));

Проблема в том, что это работает только тогда, когда основное окно имеет фокус.Если я открою вторичное окно WPF (или окно win32), привязка клавиш больше не будет применяться.

Есть ли способ добавить глобальную горячую клавишу для F4 (или какой-либо другой клавиши) всего приложения?
Или вхотя бы горячая клавиша в WPF?

1 Ответ

3 голосов
/ 23 июня 2011

Вы можете попробовать, я думаю, написать хук к клавиатуре и прикрепить этот хук для прослушивания сообщений клавиатуры из ветки вашего приложения.

Это действительно хороший пример для вдохновения: http://www.codeproject.com/KB/cs/globalhook.aspx.

Просто обратите внимание, что если вы используете .Net 4.0, то когда вы будете использовать SetWindowsHookEx вместо использования

Assembly.GetExecutingAssembly().GetModules()[0]

в качестве параметра hMod, используйте:

Process.GetCurrentProcess().MainModule.BaseAddress
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...