我已经构建了一个winforms应用程序,它通过重写ProcessCmdKey方法来检查CTR + ALT + S和CTRL + ALT + E按键。这很好用,但是如果屏幕保护程序继续然后关闭,则表单没有焦点,并且不会截取按键。即使表格没有焦点,我怎么能收到这些?
答案 0 :(得分:7)
Alexander Werner在Code Project上有一个“System Hotkey Component”项目,它将RegisterHotkey()API封装到一个非常容易实现的用户控件中。
答案 1 :(得分:5)
我知道两种方法:
RegisterHotKey() - 您可以使用RegisterHotKey()函数定义系统范围的热键。如果用户按下热键,Windows将发送WM_HOTKEY消息。
Win32 Hooks - 这是一个最初设计用于支持基于计算机的培训(CBT)应用程序的旧API,但我相信Windows仍然支持它。 API允许您拦截并可能修改任何窗口的消息,鼠标操作和击键。
这些是Win32 API,而不是.NET API,但.NET使用与Windows相同的底层组件,因此这些方法应该与.NET一起使用。
答案 2 :(得分:0)
我知道很久以前就问过这个问题了,但是如果有人来这里,那可能是解决方案:
只需将KeyPreview
属性(您的表单)设置为True
即可。这样,您的表单将在任何其他控件之前处理KeyPress
事件,即使其中一个具有焦点
我遇到了类似的问题。点击此处:KeyPress at form level with controls
希望有所帮助