{
CWnd *pwnd = FindWindow("MARIO01","加油中国,自强不息!"); //希望找到资源管理器
if(pwnd->GetSafeHwnd())
{
pwnd->ShowWindow(SW_NORMAL);
pwnd->SetForegroundWindow();
keybd_event(90,MapVirtualKey(90,0),0,0);
keybd_event(90,MapVirtualKey(90,0),KEYEVENTF_KEYUP,0);
}
这段代码是 当接收到S,模拟键盘上的Z键,游戏人物发射炮弹。但实际中,人物没有任何反应,但是在txt文档中可以不断输出z。同时,如果去掉keybd_event(90,MapVirtualKey(90,0),KEYEVENTF_KEYUP,0); 这一句,游戏中的人物可以连续不断的发射炮弹。这就是说,可以模拟按键一直按下去不动,但是模拟不了按键按一下。还有的说用postmessage,但是在mfc中postmessage只有三个参数,没有第一个句柄的参数,所以我无法指定游戏窗口为当前窗口,无法实现对游戏人物的控制。研究了很久也不知道怎么回事!!求解答!!!
6 个解决方案
#1
类似的控制程序我都使用“状态机”模式,动作的每个状态都是被控的,所有的动作均由设计的触发状态决定。一条线的程序不符合面向对象的风格。
#2
注意两个问题
1. 两个keybd_event之间要加上延时
2. 不同程序判别按键用的方式可能不一样, 有虚拟键代码 或 扫描码 keybd_event 最好两个都写上
1. 两个keybd_event之间要加上延时
2. 不同程序判别按键用的方式可能不一样, 有虚拟键代码 或 扫描码 keybd_event 最好两个都写上
#3
什么是状态机,我第一次写这个程序,所以都是一步步摸索来的~~您能详细指导一下么
#4
我的程序里 第一个参数是虚拟码,第二个就是扫描码~都写了啊
而且我的程序中有个控制人物跳起的z键,在游戏中是可以控制的
#5
使用
api ::postmessge not
mfc postmessage
#6
又试了几次 发现真的是没加sleep 的原因~~多谢各位!!
#1
类似的控制程序我都使用“状态机”模式,动作的每个状态都是被控的,所有的动作均由设计的触发状态决定。一条线的程序不符合面向对象的风格。
#2
注意两个问题
1. 两个keybd_event之间要加上延时
2. 不同程序判别按键用的方式可能不一样, 有虚拟键代码 或 扫描码 keybd_event 最好两个都写上
1. 两个keybd_event之间要加上延时
2. 不同程序判别按键用的方式可能不一样, 有虚拟键代码 或 扫描码 keybd_event 最好两个都写上
#3
类似的控制程序我都使用“状态机”模式,动作的每个状态都是被控的,所有的动作均由设计的触发状态决定。一条线的程序不符合面向对象的风格。
什么是状态机,我第一次写这个程序,所以都是一步步摸索来的~~您能详细指导一下么
#4
注意两个问题
1. 两个keybd_event之间要加上延时
2. 不同程序判别按键用的方式可能不一样, 有虚拟键代码 或 扫描码 keybd_event 最好两个都写上
我的程序里 第一个参数是虚拟码,第二个就是扫描码~都写了啊
而且我的程序中有个控制人物跳起的z键,在游戏中是可以控制的
#5
使用
api ::postmessge not
mfc postmessage
#6
注意两个问题
1. 两个keybd_event之间要加上延时
2. 不同程序判别按键用的方式可能不一样, 有虚拟键代码 或 扫描码 keybd_event 最好两个都写上
我的程序里 第一个参数是虚拟码,第二个就是扫描码~都写了啊
而且我的程序中有个控制人物跳起的z键,在游戏中是可以控制的
又试了几次 发现真的是没加sleep 的原因~~多谢各位!!