键盘模拟2

键盘模拟2

昨天说到《红警3》的连续按键不能用传统的方法模拟,因为它是使用了DirectInput,这绕过了消息队列。
一般情况下我们连续按住一个键,产生的消息是: WM_KEYDOWN——WM_KEYDOWN——...WM_KEYDOWN——WM_KEYUP。(注意忽略了WM_CHAR,可能在每个WM_KEYDOWN后面有一个WM_CHAR消息)。而如果我将这些消息修改成WM_KEYDOWN——WM_KEYUP——WM_KEYDOWN——WM_KEYUP...WM_KEYDOWN——WM_KEYUP,不就想了吗。(只有一部分处理WM_KEYUP消息的程序受影响)。
那么如何修改键盘的消息呢,哈哈,你可以查看《ROOTKITS--WINDOWS内核的安全防护》这本书,该书的第6章专门有一节介绍如何在驱动上截获键盘的。
下面是如何修改键盘消息的代码,其实很简单。
...
if (pIoStackLocation->Parameters.Read.Length >= sizeof(KEYBOARD_INPUT_DATA))
{
pInputData = (PKEYBOARD_INPUT_DATA)pirp->AssociatedIrp.SystemBuffer;

if (pInputData->MakeCode == PriorMakeCode) //如果按键的机器码和上次一样的话
if (pInputData->Flags == PriorFlags) //如果按键上次一样的话,即都是按下或弹起
if (PriorFlags == 0) //如果上次是按下的话
pInputData->Flags = 1; //这次就改成弹起

PriorMakeCode = pInputData->MakeCode;
PriorFlags = pInputData->Flags;

}

...

这样就可以解决因为DirectInput而不能连接按键的情况了。


参考书籍:
1.ROOTKITS--WINDOWS内核的安全防护

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值