一款游戏,移动角色的键位分别是功能键区下面的“上,下,左,右”。用起来极其不爽,欲写一个程序,让WSAD代替上下左右,对应关系是:
W=上
S=下
A=左
D=右我曾经尝试用SendKey,虽然可以实现,但是现在遇到特别头痛的问题,即使我按下了W,角色的确也往上走了,但是游戏接收到了"W"键。游戏中的聊天窗口中不停的“WWWWWWWWWWWWWWWWWWWWWWWWWW” 让人很烦。现在问题就是,如何在按下W的时候,让游戏只接收到“上”,不让他接收到“W”?
据说要用HOOK什么的了,希望能得到各位大大的地细心详细的指导。或者以前有过类似的问题,希望大家能提供相关的连接,都给分。顶者也象征性的送分。哈哈~

解决方案 »

  1.   

    http://community.csdn.net/Expert/topic/4073/4073492.xml?temp=.2259943
      

  2.   

    記不太清楚了,那4個的代碼好象是keycode=38,39,40,41
      

  3.   

    感谢 Athickhead(穿着三角裤到处跑终归是件不体面的事)  给出的代码,但是这也只非焦点程序拦截监听到焦点程序输入的键盘鼠标动作。以后我要开始学习做木马此帖绝对是我必看的。但是我这帖里的难点是,如何在我按下W,S,A,D以后, 只让游戏接受到 上下左右 , 不再接受WSAD了?~~好难,唉
      

  4.   

    可行的办法:同时使用 API SetWindowsHookEx 和 WH_KEYBOARD_LL
    LowLevelKeyboardHook该方法在当前桌面的全局范围内创建一个低级别的键盘挂钩层。在调用 SetWindowsHookEx 时指定的 LowLevelKeyboardProc 回调函数将接收所有的键盘输入。处理完键盘输入后,LowLevelKeyboardProc 应调用 CallNextHookEx 以使下一个挂钩链(很可能是目标应用程序)能够接收输入。由于 LowLevelKeyboardProc 接收了所有的键盘事件,因此可以很容易地将其用作一个状态机,并从 LowLevelKeyboardHook 中返回而不把最后的键事件转给其他应用程序。
         ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
    这个是msdn的说明:
    http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookfunctions/setwindowshookex.asp?frame=true
      

  5.   

    你可以上网找一个dwlGina2.dll,它是有很强的HOOK功能,甚至可以在WIN2000,XP,2003中屏蔽CTL+ALT+DEL三个键.包括鼠标都可以控制.而且它还有示例的源程序.
      

  6.   

    这个人做出来了,你可以联系他:http://menphix.yculblog.com/post.114674.html
      

  7.   

    这个……我的确做出来了。
    大体思路是用LowLevelKeyboardHook拦截WSAD键,当拦截到W时使用keybd_event()创建一个按“上”键的信息给OS。注意,这个按“上”键的信息同样会被LowLevelKeyboardHook拦截到,所以千万只能拦WSAD,不能拦“上下左右”
    具体的一句两句话说不清楚,[email protected]我的邮箱,发信详细谈。
      

  8.   

    用一个热键开关控制不就OK了么。。
    系统HOOK的话最好是改变抽象层实现,不然会导致紊乱的。。
      

  9.   

    呵呵menphix(menphix)
    幸会~~原来你也来这里啊~
    知道我是怎么知道你做出来的么?:)
    我把全国中小学电脑制作活动公示的所有程序作品都down下来欣赏了,然后,就在baidu搜你的id,找到了你的blog。不过你的好象也没被选中去面试是吧?我也没被选上。
    不过,你们准备的很好,竟把所有运行环境都打包了,一个个下来3,4百mb
    我们就差远了,省里也不重视。
      

  10.   

    TO: DooDu(杜霖:I want,I can.(MmMVP马甲)) 
    握手先,你也参加那个比赛了阿,你做的是什么?
    我也基本所有程序都载下来了……唉,有的好烂的程序也上去了没办法……