即使表单没有焦点,拦截按键也是如此

时间:2009-02-16 16:24:33

标签: c# .net winforms

我已经构建了一个winforms应用程序,它通过重写ProcessCmdKey方法来检查CTR + ALT + S和CTRL + ALT + E按键。这很好用,但是如果屏幕保护程序继续然后关闭,则表单没有焦点,并且不会截取按键。即使表格没有焦点,我怎么能收到这些?

3 个答案:

答案 0 :(得分:7)

Alexander Werner在Code Project上有一个“System Hotkey Component”项目,它将RegisterHotkey()API封装到一个非常容易实现的用户控件中。

答案 1 :(得分:5)

我知道两种方法:

  1. RegisterHotKey() - 您可以使用RegisterHotKey()函数定义系统范围的热键。如果用户按下热键,Windows将发送WM_HOTKEY消息。

  2. Win32 Hooks - 这是一个最初设计用于支持基于计算机的培训(CBT)应用程序的旧API,但我相信Windows仍然支持它。 API允许您拦截并可能修改任何窗口的消息,鼠标操作和击键。

  3. 这些是Win32 API,而不是.NET API,但.NET使用与Windows相同的底层组件,因此这些方法应该与.NET一起使用。

答案 2 :(得分:0)

我知道很久以前就问过这个问题了,但是如果有人来这里,那可能是解决方案:

只需将KeyPreview属性(您的表单)设置为True即可。这样,您的表单将在任何其他控件之前处理KeyPress事件,即使其中一个具有焦点

我遇到了类似的问题。点击此处:KeyPress at form level with controls

希望有所帮助