最近又去回味一下经典游戏——奇迹,玩到了300多级,各种PK,连击,吃药操作跟不上来,于是花了点功夫写了一个小工具,自动狂吃药,技能切换,满足PK需求。下面是核心代码段,使用模式是用DLL注入到游戏进程中。
#include <stdlib.h>
#include <stdio.h>
//导出变量
__declspec(dllexport) bool bWork = true;
//在EXE程序中 __declspec(dllimport) bool bWork;使用
bool IsValidateWindow()
{
HWND hWnd = GetForegroundWindow();//获取窗口句柄;
DWORD processID;
::GetWindowThreadProcessId(hWnd,&processID);
DWORD dwCurrentProcessId = GetCurrentProcessId();
return dwCurrentProcessId == processID;//当前窗口句柄不是游戏句柄
}
void KeyPress(int iKeyValue)
{
INPUT objInput;
objInput.type = INPUT_KEYBOARD;
objInput.ki.dwExtraInfo = 0;
objInput.ki.dwFlags = 0;
objInput.ki.time = 1;
objInput.ki.wVk = iKeyValue;
objInput.ki.wScan = 0;
if(IsValidateWindow())SendInput(1, &objInput, sizeof(INPUT));
::Sleep(60);
objInput.type = INPUT_KEYBOARD;
objInput.ki.dwExtraInfo = 0;
objInput.ki.dwFlags = KEYEVENTF_KEYUP;
objInput.ki.time = 1;
objInput.ki.wVk = iKeyValue;
objInput.ki.wScan = 0;
if(IsValidateWindow())SendInput(1, &objInput, sizeof(INPUT));
}
UINT ThreadKey(LPVOID pVoid)
{
while (bWork)
{
//按1
KeyPress(0x31);
Sleep(500);
//按2
KeyPress(0x32);
Sleep(500);
}
return 0;
}
生成了DLL之后,用DLL注入器注入就行了,这种代码很多的。我就不上传了。

理论上不用注入也可以,注入一般是为了更有效执行,因为注入以后和宿主是一体的,有足够大的执行权力。
PS后记:确定不用DLL确实也可以。只要判断当前最顶层窗口是不是游戏窗口的句柄即可。
本文链接:https://it72.com/12270.htm