最近想写一个关于俄罗斯方块的游戏,初步设计成写进一个DLL里,提供几个简单的接口,如StartGame()等,但是在封装时,发现需要响应键盘消息(加速键功能)。最开始想了很多种方法,目的都是为了将应用程序里的消息传递到DLL中去,最开始想使用MFC的消息机制,将应用程序的消息手动传递到DLL中,使其DLL有机会执行相应的消息。但考虑到封装,以及接口的易用性,而且耦合度也增加了,于是果断放弃了该想法。最后经过在网络上查询,可以利用简单的键盘钩子实现以上功能。
使用键盘钩子(局部键盘钩子,系统钩子,杀毒软件要阻止)的方法如下:
1. 挂载键盘钩子
//设置钩子函数,实现加速键功能
DWORD dwThreadId = 0, dwProcessId = 0;
//获取创建窗口的线程ID与进程ID
dwThreadId = ::GetWindowThreadProcessId(m_hHookWnd, &dwProcessId);
m_hHook = (HHOOK)SetWi