最近弄这个很头疼了,没多少基础,不好理解,现在弄清楚了,这里总结一下.
先说要用到的API
SetWindowLong
GetWindowLong '用来获取/设置窗口的消息处理函数地址,为什么后面会说到
上面两个函数都要用到GWL_WNDPROC = (-4)这个常数
CallWindowProc
RegisterHotKey
UnregisterHotKey '用来注册,释放快捷键(因为就算程序关了,系统自己不会释放程序注册了的快捷键,会造成其他程序注册相同快捷键的时候失败)
因为VB本身不处理热键消息,有关此消息请参考MSDN上WM_HotKey的说明
所以,我们要自己写消息处理函数来处理热键消息,
窗体的消息处理函数,是一个名叫WindowProc的回调函数,每个窗口都有一个这样的函数用来处理各种消息,
因为它要处理各种不同种类的消息进行不同的判断,所以一般是一个相当大的函数,不过我们不需要重写它,毕竟这是很耗时间的事情,
我们只需要增加一点点专门处理热键消息的过程就可以了,把其他的消息交给原来窗口的WindowProc,这样就可以省很多事.
但是,VB本身对于WindowProc是在编译的时候添加进去的,没有给我们留下编辑的余地,所以,得用其他变通的方法解决.
这里的思路是:先让自己写的过程收到消息判断是否是热键消息,然后再进行进一步判断和需要的过程调用,如果不是热键消息,就把消息归还给原来的窗口.
下来说具体的实现例子
以添加一个Alt+N的热键用来隐藏/