在混合wpf / win32应用程序中定义应用程序范围的热键

时间:2010-12-01 11:12:31

标签: wpf hotkeys winapi

我有一个WPF(prism)应用程序,它使用了许多其他WPF程序集,甚至包含其他窗口的win32 dll(wpf和win32)。

当用户按下功能键(F2-F12)时,我想打开特殊的程序功能。

这样的事情:

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

问题是:这仅在MainWindow具有焦点时才起作用。如果我打开辅助WPF窗口(或win32窗口),则键绑定不再适用。

有没有办法为F4(或其他一些键)添加应用范围的全局热键?
或者至少是一个WPF范围的热键?

1 个答案:

答案 0 :(得分:3)

您可以尝试我想为键盘编写一个钩子并附加此钩子来侦听来自应用程序线程的键盘消息。

这是灵感的真正好榜样:http://www.codeproject.com/KB/cs/globalhook.aspx

请注意,如果您使用.Net 4.0,那么当您使用SetWindowsHookEx而不是使用

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

作为hMod参数,请使用:

Process.GetCurrentProcess().MainModule.BaseAddress