在我的 WPF 应用程序中捕获没有焦点的按键事件

Posted

技术标签:

【中文标题】在我的 WPF 应用程序中捕获没有焦点的按键事件【英文标题】:Capturing Key Press Event in my WPF Application which do not have focus 【发布时间】:2011-05-26 17:59:36 【问题描述】:

我在 WPF 中开发了一个屏幕键盘。我需要获取密钥 按下事件(通过键盘)以跟踪 Caps Lock、Shift 等(是否按下)。 请注意,当任何其他应用程序时,我的应用程序会失去焦点 (比如记事本)已打开。

谁能建议如何在 WPF 中实现这一点? 简而言之,我的 WPF 应用程序甚至需要捕获按键事件 虽然它没有焦点。请帮忙。

【问题讨论】:

您必须使用 Windows API 向 Windows 注册键盘挂钩。 blogs.msdn.microsoft.com/toub/2006/05/03/… 【参考方案1】:

这对我很有帮助:Disable WPF Window Focus

这和你的问题不完全一样,他试图在没有获得焦点的情况下捕捉一个事件,但这是一个很好的起点

【讨论】:

【参考方案2】:

我在后面使用了一个简单的代码:

在 xaml 中,我使用了一个名为 MyTestKey 的 KeyDown 事件。

<Window x:Class="MyApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        KeyDown="myTestKey" >

这就是我检查数字 1 的 keydown 例程的样子:

private void myTestKey(object sender, KeyEventArgs e)

            if ((e.Key == Key.D1) || (e.Key == Key.NumPad1))
            
                //do some stuff here
                return;
            

这是获取任何键的简单方法。我希望这会有所帮助。

【讨论】:

应用非焦点时不起作用,只对焦点应用有效。错误的答案。

以上是关于在我的 WPF 应用程序中捕获没有焦点的按键事件的主要内容,如果未能解决你的问题,请参考以下文章

捕获 DIV 元素上的按键(或 keydown)事件

如何捕获android系统按键事件

WPF 弹出窗口捕获鼠标双击事件

如果插入智能卡,则 WPF 捕获事件

将命令绑定到事件?

从用户控件中导航WPF选项卡控件?