我想做一个类似与魔兽的warkey的工具,谁有方案,或者有源代码的,快来帮帮忙啊!--

解决方案 »

  1.   

    没完过,不知道warkey是什么东西
      

  2.   

    我做了其中一个功能,就是显示血条,我用的是不停向里面发送alt键盘消息,不过这样做会和魔兽里面其他要用到alt的快捷键有冲突啊,怎么解决啊!大侠们帮忙啊!
      

  3.   

    不知道“魔兽的warkey”是什么
      

  4.   

    显血条应该是修改魔兽的设置文件貌似,暴雪在新版本里加了这个功能
    改键  可以是修改注册表的,但是warkey可以动态关掉,不知道是不是又改回来了,你下载个regmon研究下warkey是怎么工作的哈~
      

  5.   

    Warkey是修改键是实时的,所以不可能修改什么注册表,太笨了。
    应该是键盘钩子吧?截获原始消息,发送修改后的消息。至于显血条..不停的发Alt也不对,肯定会冲突。估计是War3自身有这接口,或者是跟以前的修改器差不多,直接访问War3内存。
      

  6.   

    搜索了下,原来warkey是外挂。。说下我的看法
    1 显示血量
    无非就是alt键有没按住,程序内部也就是
    if(alt按下) { //flag
      显示血条
    } else {
      不显示
    }
    所以你只要找到那个flag 并控制就可以了,估计是一个bool值,
    打开war3,松开alt,用金山游侠搜索0
    然后按下alt, 搜索1
    重复以上n次直到找到那个flag2 修改按键
      我曾做过把小键盘7映射成q键,这样直接按2下q就回城了,用的是简单的键盘hook,实现不难不知warkey还有什么功能
      

  7.   

    另外就算用发送alt按键消息 也不用不停发送,只需要发送一次 WM_KEYDOWN 就可以了,不用发送WM_KEYUP
      

  8.   

    多谢楼上的,我去研究一下你说的方法,能不能把你的那个“把小键盘7映射成q键”的程序代码发我一份啊,,谢谢了!不过,你说的只要发送一次“WM_KEYDOWN ”,这个是我第一次用的方法,但是只发一次的话,你按下alt键在松开后,就没有一直按下的效果了。这样就不能一直显示血条了!
      

  9.   

    那东西是n久前的事,早没了,很简单的用 FindWindow 找到war3窗口 然后用SetWindowsHook键盘钩子,判断是不是q被按下,如果是的话就丢弃q,模拟按下7就可以了,一共没几句代码。
    另外当你按下alt键时候会有WM_KEYDOWN消息,放开alt键才会有WM_KEYUP, WM_KEYDOWN只是被按下,不包括放开,就是说如果你发送WM_KEYDOWN给war3,war3会认为alt被按下了,直到你发送WM_KEYUP给它 它才会认为alt键被放开,所以只需发送一次WM_KEYDOWN就可以,没试验过,仅供参考。。
      

  10.   

    我写了个改键方法,测试后再war3中有效,可是这个跟warkey的差不多,消息发送那地方有点不好.
    下面是源代码.
    将F3改为数字键的7(打开qq测试可以成功,war3.exe也可以成功,好多地方是不行的)
    /*----------------------------------------------------
    工程名HookGlobal,没有写dllmain函数,hook卸载只能等程序结束了
    win32 dynamic link library
    ------------------------------------------------------*/
    // Hookglobal.cpp
    #include <windows.h>HHOOK g_hKeyboard;LRESULT CALLBACK KeyboardProc(
      int code,       // hook code
      WPARAM wParam,  // virtual-key code
      LPARAM lParam   // keystroke-message information
    );// set keyboard hook
    void SetKeyboardHook()
    {
    // set hook, GetModuleHandle用来获得dll的hModule句柄
    g_hKeyboard = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc,
    GetModuleHandle("HookGlobal.dll"), 0);
    }// keyboardProc
    LRESULT CALLBACK KeyboardProc(
      int code,       // hook code
      WPARAM wParam,  // virtual-key code
      LPARAM lParam   // keystroke-message information
    )
    {
    HWND hFgrdWnd; // hForegroundWindow,用来储存前台窗口句柄,运行魔兽的时候就是储存魔兽句柄
    if(VK_F3 == wParam)
    {
    hFgrdWnd = GetForegroundWindow(); //获得前台窗口句柄,用来下面的发送消息用
    PostMessage(hFgrdWnd, WM_KEYDOWN, 0x67, lParam); // 向前台发送0x67,这里的lParam没处理,不太好.
    return 1; // F3被截获
    }
    else // 其他
    {
    return CallNextHookEx(g_hKeyboard, code, wParam, lParam);
    }
    }// HookGlobal.def 导出函数
    LIBRARY HookGlobalEXPORTS
    SetKeyboardHook @1这个就是dll了.编译链接后产生Hookglobal.lib跟Hookglobal.dll,拷贝到调用进程目录下.下面就是调用进程.
    建个mfc或者其他的工程,大概代码如下了.
    #pragma comment(lib, "HookGlobal.lib") // 编译链接Hookglobal.lib(指定适当的目录),静态加载
    _declspec(dllimport) void SetKeyboardHook(); // 导入函数
    SetKeyboardHook(); // 调用这个dll中的函数
    完了,当然你也可以用动态调用.大概就是这些了.
    只是有个问题:
    PostMessage(hFgrdWnd, WM_KEYDOWN, 0x67, lParam); 这个向指定的窗口发送数字键7消息,某些程序可以,比如qq聊天,但是在ie地址栏中按F3却没有效果(warkey也是如此),大概是hFgrWnd的问题,问题就是如何获得截获的消息所属的窗口句柄,这个才是关键,知道的回答下....
    谁写个更好的发个源代码邮件[email protected]谢谢.
      

  11.   

    一看就知道  都是外行   钩子 是要用全局 钩子,  你看哪个改建用了动态库啊 ?用全局钩子 杀鸡用牛刀
    只要注册热键就好了RegisterHotkey()
    还有那个显血  ,一看你就不是玩魔兽的,谁说只有alt可以显血,去魔兽里试试"["和"]"。就知道了  ,不和其他建冲突,模拟按下这两个键,ok?
      

  12.   

    你个傻缺 人家这是几年前的问题了 你现在才回答 还一口装B的语气... 真TM恶心