系统热键

.net中没有提供system-wide hot key的处理类,注册和释放热键需要使用Win32的两个API,原型如下

hWnd是一个窗体句柄,按下热键时,Windows会把一个WM_HOTKEY消息发送给这个窗体处理过程,我们需要在窗体处理过程中处理

WM_HOTKEY消息,加入响应代码,hWnd也可以为NULL,这时候就需要在进程的消息循环中处理WM_HOTKEY

 

id是热键id,注意这个id是需要我们去主动生成的,Windows会在在WM_HOTKEY的WParam中放置这个热键id,这样响应代码可以根据WParam也就是热键id对同一窗体的不同热键作出区别处理,此外UnregisterHotKey也需要这个热键id(必须一致,不能R是3而U给4)作为参数进行相应热键的释放

 

fsModifiers用于指示功能键组合

 

vk键代码

 

热键id是RegisterHotKey和UnregisterHotKey之间的桥梁,只是与文件句柄不同,这个id是手工生成的

 

在C#中Import这两个API后可以直接调用,在Form中用一个成员保存热键id即可,不过这里给出一个参考pInvoke上的封装类,这个类很好的展示了Invoke在自定义类中的应用

在以上类定义中,在Form的操作都被封装在了委托里,然后Form.Invoke,这样的类的线程安全的,此外R和U这两个API应该是不用try的,在测试过程中并没有发现会抛出异常的情况。

 

以下是调用代码

 参考资料:
RegisterHotKey Function ()
http://msdn.microsoft.com/en-us/library/ms646309(VS.85).aspx

pinvoke.net RegisterHotKey (user32)
http://www.pinvoke.net/default.aspx/user32/RegisterHotKey.html

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值