一直用键盘玩kof,上的是网上对战平台。kof98用键盘超不爽,于是想自己写个软件,可以设置‘宏’一样的功能。利用Hook技术,监视键盘事件,只要发现按下的是我设置的热键,自动向目标窗口发键盘消息。我用的网络对战平台是:
    ArcLive!    [Powered by Www.ArcLive.Com.Cn]用 ::FindWindow 获取窗口句柄后向它发送键盘按键消息:
HWND hWnd=::FindWindow(NULL,"    ArcLive!    [Powered by Www.ArcLive.Com.Cn]");
if(hWnd != NULL)
{
if(wParam == 78)
{

::PostMessage(hWnd,WM_KEYDOWN,68,0);
Sleep(55);

::PostMessage(hWnd,WM_KEYDOWN,70,0);
Sleep(55);

::PostMessage(hWnd,WM_KEYDOWN,68,0);
Sleep(55);

::PostMessage(hWnd,WM_KEYDOWN,83,0);
Sleep(55);

::PostMessage(hWnd,WM_KEYDOWN,74,0);
}
}
上面是一组游戏角色发大绝的按键。
完成的功能就是:当按下 N 时,向游戏窗口依次发送 D F D S J但无论用 PostMessage 还是 SendMessage 都无反应。人物一动不动。但在游戏的一个Edit Control(说话用的)里按下 N 时,后面会自动连续输入 DFDSJ。
也就是说对edit控件有效。为什么啊?游戏时人物动作不接受我的按键消息?是游戏自身对我发的消息屏蔽掉了吗?
我又试着对单机游戏kof测试了一下:Kawaks 1.48 - The King of Fighters '97 Plus (bootleg)发现只要我按下 N ,游戏自动弹出MessageBox _________
|Kawaks   |
|         |
|  Key    |
|         |
|确定     |
|_________|似乎对我的PostMessage进行了拦截。  失败!望指出对游戏窗口发按键消息为什么不成功??以及怎样才能成功??谢谢。

解决方案 »

  1.   

    有WM_KEYDOWN就应该有WM_KEYUP消息
      

  2.   

    用什么模拟器?
    可能输入是用directinput,而不是键盘消息。
      

  3.   

    多谢楼上几位的关注。看来直接向游戏发消息是行不通了。都会被屏蔽掉。我想,既然游戏会屏蔽别的应用程序给他自己发的消息,那游戏一定不会屏蔽自己给自己发的消息。所以,我想用远程钩子把DLL 注入游戏进程,只要DLL注入进去了,就可以发按键消息。
    这样一定不会拦截掉了。搞了几天了,还没有成功。郁闷。总感觉大体思路上不对。DLL里的回调函数是向我的程序发HM_KEY消息,然后我又要向游戏发消息。貌似还是从外部发的消息。搞不定了,希望哪位能具体说一下DLL和我的程序应该怎么写。只要大体上给个步骤就行了。希望各位百忙之中帮帮忙!  谢谢了!
      

  4.   

    算了,DLL注入 和 远程钩子技术较复杂。现在看来是无能为力了。
    以后再来研究这个问题吧。结贴!