初学钩子方面的知识,回想到一些游戏盗号的程序也是这个原理,觉得有必要好好了解一下。
代码段是我找了一个基本的局部键盘钩子之后修改了一下,由于我发现得到的键盘码都是大写的,那么怎么判断用户输入的究竟是大写还是小写呢?
我们通过判断shift键和大写锁定键这两个键的状态来确定输入的是大写还是小写,用到的函数是GetKeyState和GetAsyncKeyState,判断CapsLock只能用前者,判断Shift只能用后者,GetAsyncKeyState在按下某键的同时调用,判断正在按下某键。GetKeyState则在按过某键之后再调用,它返回最近的键盘消息从线程的队列中移出时的键盘状态,判断刚按过了某键(请自行思考脉冲信号)。这两个键对应的虚拟键值是VK_SHIFT和VK_CAPITAL
使用GetKeyState获得返回值后,我们发现,当capslock按下时,返回-127,对应二进制是1111111100000001,没按下时返回0
shift键则是按下时为1,对应二进制 1000 0000 0000 0001,没按下时返回0
按照MSDN上面的说明
- If the high-order bit is 1, the key is down; otherwise, it is up.
- If the low-order bit is 1, the key is toggled. A key, such as the caps lock key, is toggled if it is turned on. The key is off and untoggled if the low-order bit is 0. A toggle key's indicator l