【问题标题】:Capturing the windows key in c# (wpf)在 c# (wpf) 中捕获 windows 键
【发布时间】:2010-10-20 12:45:24
【问题描述】:

我编写了一个小程序,在按下任何按钮时在屏幕上显示声音和图像。当我的一个小孩爬到我的腿上并开始敲击琴键时,我总是启动它,当然,随机的。

除了 2 个键外,它工作正常,其中一个是 ON/OFF 开关,另一个是 Windows 键。 (我相信CTRL-ESC等价物)我可以在按下它时拦截它,但只有在开始菜单显示之后。

我使用的事件是 UIElement.KeyDown,到目前为止我所能想到的是:(e 是 KeyEventArgs)

            if (e.Key == Key.LWin) e.Handled = true;

但恐怕开始窗口已经显示出来了。

我已经有 1 个答案,但很想知道是否有任何 wpf 支持?

我怀疑可能无法对主开关进行编程?否则,也欢迎任何帮助..

【问题讨论】:

    标签: c# wpf keyboard


    【解决方案1】:

    您需要keyboard hook。不幸的是,这必须通过 P/Invoke 来完成;托管代码无法做到这一点。

    查看 Scott Hanselman 的 Baby Smash!。它托管在 code plex http://www.codeplex.com/babysmash Github https://github.com/shanselman/babysmash

    或者,查看 CodeProject 上的 ShapeShow,类似。

    【讨论】:

    • 这绝对是一个答案,tx。但它需要互操作,没有你知道的原生 wpf 支持?
    • 是的。需要互操作。更新了 AB 的答案以解释这一点,并添加了指向 ShapeShow 的链接。
    • 好的,如果你们确定,感谢您的回答! (我已经安装了babysmash)
    • 注意:merrick 的回答(下图)效果很好。尽管我不确定在编写此答案时该 API 是否已经可用。 (只是在此处添加此内容,因为我第一次阅读此页面时完全错过了该答案)。
    【解决方案2】:

    http://msdn.microsoft.com/en-us/library/system.windows.input.key(v=VS.90).aspx

    在底部您会看到一个简单的示例,我认为您正在寻找的内容大致如下:

    左窗口键:System.Windows.Input.Key.LWin

    右窗口键:System.Windows.Input.Key.RWin

    示例:

    private void OnKeyDownHandler(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.LWin) {
            textBlock1.Text = "You Entered: " + textBox1.Text;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-12
      • 2010-11-23
      • 2017-10-17
      • 2011-05-14
      • 1970-01-01
      相关资源
      最近更新 更多