起源
最近朋友在玩咸鱼之王小游戏,用电脑挂机,由于火把缺乏,我看他经常疯狂的点鼠标攻击敌人。
我:"你为什么不用鼠标模拟器去点?"
朋友:"鼠标模拟器点也不能干其他的事情,鼠标必须放到游戏窗口才行。",
我:"我帮你简单实现个鼠标模拟器吧"
实现
#include <iostream>
#include <windows.h>
BOOL WINAPI HandlerRoutine(DWORD dwCtrlType);
bool g_run = true;
int main()
{
HWND hwnd = FindWindow(NULL, L"咸鱼之王");
std::string cmd;
if (SetConsoleCtrlHandler(HandlerRoutine, true) == FALSE)//处理控制台消息函数
{
std::cout <<"Unable to install handler!\n";
return -1;
}
if (hwnd != NULL)
{
std::cout << "咸鱼之王连点开始运行!" << std::endl;
std::cout << "已找到咸鱼之王窗口,句柄为:" << hwnd << std::endl;
while (true)
{
if (g_run)
{
SendMessage(hwnd, WM_RBUTTONDOWN, 0, MAKELONG(108, 197));
SendMessage(hwnd, WM_RBUTTONUP, 0, MAKELONG(108, 197));
Sleep(100);
}
else
{
std::cout << "是否退出?(y/n)" << std::endl;
std::cin >> cmd;
if (cmd == "n")
{
std::cout << "咸鱼之王连点继续运行!" << std::endl;
g_run = true;
}
else
{
std::cout << "咸鱼之王连点结束运行!" << std::endl;
break;
}
}
}
}
else
{
std::cout << "未找到咸鱼之王窗口!" << std::endl;
}
return 0;
}
BOOL WINAPI HandlerRoutine(DWORD dwCtrlType)
{
switch (dwCtrlType)
{
case CTRL_C_EVENT:
g_run = false;
break;
}
return true;
}
总结
其实原理很简单主要利用FindWindow函数找到游戏窗口句柄,再用SendMessage函数把鼠标点击消息发送给游戏窗口。