vc中如何实现按键精灵的代码

ice_sky2008 2007-02-23 02:43:33
按键精灵中实现的代码:

MoveTo 900 100
LeftClick 1
KeyPress 53 1

我在vc中这样实现:
CPoint ptSet(900,100);
SetCursorPos(ptSet.x,ptSet.y);

mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN,ptSet.x,ptSet.y ,0,0);

mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP,ptSet.x,ptSet.y,0,0);

keybd_event('5', 0, 0 ,0);
keybd_event('5', 0, KEYEVENTF_KEYUP ,0);

这样的效果跟按键精灵的效果不一样,请问这是问什么?
不要告诉我用sendmessage或者postmessage,WM_KEYDOWN和WM_CHAR都试过了,不行,

其实就像实现模拟键盘按键,mame这个游戏程序,只有对按键精灵反应,其他的用vc中的sendmessage或者postmessage,keybd_event。postThreadMessage都没有反应?
那么按键精灵是怎么实现的??
这个问题有挑战性吧??
...全文
2237 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
骄傲青蛙 2009-08-30
  • 打赏
  • 举报
回复
有源码么? 想学习
骄傲青蛙 2009-08-30
  • 打赏
  • 举报
回复
楼主有源码么? 想学习
ice_sky2008 2007-02-23
  • 打赏
  • 举报
回复

感谢 wangtk(斗士)
问题解决了,mame不接受消息,用模拟按键keybd_event解决了,还没有试试SendInput

keybd_event('5', MapVirtualKey('5',0), NULL ,NULL);
Sleep(100);
keybd_event('5', MapVirtualKey('5',0), KEYEVENTF_KEYUP ,NULL);

第二个参数不能设为null,必须传递扫描码,Sleep(100);也是必须的,否则两个事件太靠近,游戏无法识别
wangtk 2007-02-23
  • 打赏
  • 举报
回复
mame处理手柄动作和键盘确实用的是DirectInput

不知用SendInput可否

或者加载一个键盘驱动......



ice_sky2008 2007-02-23
  • 打赏
  • 举报
回复
补充下.......
我从网上看到这样一句话
如果目标程序使用了DirectInput,就不会处理WM_KEYDO55WN或者是WM_KEYUP消息
会不会是mame这个游戏使用了DirectInput,vc中就不能用消息传递的方法?
那么按键精灵的KeyPress 是怎么实现的,若果这的是使用了DirectInput,在vc中应该调用什么函数,才有跟按键精灵一样的效果???

2,586

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 资源
社区管理员
  • 资源
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧