我想做一个类似与魔兽的warkey的工具,谁有方案,或者有源代码的,快来帮帮忙啊!--
解决方案 »
- 用openthread获取线程handle结果值为0
- tcptraceroute好像也不能用!
- ACTIVEX控件在VB6和VB2005中的迷惑
- 怎样删除桌面的文件?
- 怎么得到窗口的位图数据啊?
- vc中利用ado数据库编程时,交叉操纵不同的access数据库中的表时,为何出现异常?
- 请问:关于CString(救命,上机考试)
- 我想问问,如果代码做了备份,能保证生成相同的目标代码和.exe文件?除了备份代码之外,还备份了开发工具(VC6.0),集成服务器的软件环
- SDI界面如何使View有滚动条?
- 来者有分!同样的代码,windows登陆前后执行结果不一样。
- 关于Access数据库模糊查询语句Select where like
- 静态变量在多线程中的问题(怎么让它们各自为战)
改键 可以是修改注册表的,但是warkey可以动态关掉,不知道是不是又改回来了,你下载个regmon研究下warkey是怎么工作的哈~
应该是键盘钩子吧?截获原始消息,发送修改后的消息。至于显血条..不停的发Alt也不对,肯定会冲突。估计是War3自身有这接口,或者是跟以前的修改器差不多,直接访问War3内存。
1 显示血量
无非就是alt键有没按住,程序内部也就是
if(alt按下) { //flag
显示血条
} else {
不显示
}
所以你只要找到那个flag 并控制就可以了,估计是一个bool值,
打开war3,松开alt,用金山游侠搜索0
然后按下alt, 搜索1
重复以上n次直到找到那个flag2 修改按键
我曾做过把小键盘7映射成q键,这样直接按2下q就回城了,用的是简单的键盘hook,实现不难不知warkey还有什么功能
另外当你按下alt键时候会有WM_KEYDOWN消息,放开alt键才会有WM_KEYUP, WM_KEYDOWN只是被按下,不包括放开,就是说如果你发送WM_KEYDOWN给war3,war3会认为alt被按下了,直到你发送WM_KEYUP给它 它才会认为alt键被放开,所以只需发送一次WM_KEYDOWN就可以,没试验过,仅供参考。。
下面是源代码.
将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]谢谢.
只要注册热键就好了RegisterHotkey()
还有那个显血 ,一看你就不是玩魔兽的,谁说只有alt可以显血,去魔兽里试试"["和"]"。就知道了 ,不和其他建冲突,模拟按下这两个键,ok?