如果想要在Win32窗体程序中实现按键捕获,可以覆写PreTranslateMessage函数,但是有一个缺点,就是此方法只有当程序窗口获取到焦点时才可以捕获到键盘,如果在其它程序窗口中按下按键,是捕获不到的,为了解决这个问题,就需要使用到钩子
钩子简介
挂钩是一种机制,应用程序可以通过它截获事件,例如消息、鼠标操作和击键。截获特定类型事件的函数称为挂钩过程。挂钩过程可以对它接收的每个事件执行操作,然后修改或放弃该事件。
钩子分为线程钩子(局部钩子)、系统钩子(全局钩子)
线程钩子监视指定线程的事件消息。
系统钩子监视系统中的所有线程的事件消息。因为系统钩子会影响系统中所有的应用程序,所以钩子函数必须放在独立的动态链接库(DLL)中。这是系统钩子和线程钩子很大的不同之处。
钩子的类型
WH_CALLWNDPROC和WH_CALLWNDPROCRET
WH_CBT
WH_DEBUG
WH_FOREGROUNDIDLE
WH_GETMESSAGE
WH_JOURNALPLAYBACK
WH_JOURNALRECORD
WH_KEYBOARD_LL
WH_KEYBOARD
WH_MOUSE_LL
WH_MOUSE
WH_MSGFILTER和WH_SYSMSGFILTER
WH_SHELL
如对于WH_KEYBOARD,有对应的回调函数。