背景:因为每次外出电脑都得从平衡模式切换到办公模式,过程复杂,因此做了个简单的鼠标帮点代码
#include <iostream>
#include <windows.h>
#include <chrono>
#include <vector>
#include <thread>//可提供延迟函数
using namespace std;
enum Mode
{
Balence,
Office
};
class modeSwitch
{
public:
modeSwitch(vector<vector<int>> balenceLocations, vector<vector<int>> officeLocations, vector<int> intervalTimes)
: m_balenceLocations(balenceLocations), m_officeLocations(officeLocations), m_intervalTimes(intervalTimes)
{
if (m_balenceLocations.empty() || m_officeLocations.empty() || m_intervalTimes.empty())
{
cout << "初始化失败!" << endl;
}
}
void switchMode(Mode mode)
{
switch (mode)
{
case Balence:
switchToBalancedMode();
break;
case Office:
switchToOfficeMode();
break;
default:
cout << "未选择初始化模式" << endl;
}
}
private:
vector<vector<int>> m_balenceLocations;
vector<vector<int>> m_officeLocations;
vector<int> m_intervalTimes;
static constexpr int DEFAULT_DELAY = 1000;//默认为1s
void delayFunction(int milliseconds)
{
this_thread::sleep_for(chrono::milliseconds(milliseconds));
}
void switchToBalancedMode()
{
cout << "切换平衡模式" << endl;
processClicks(m_balenceLocations);
}
void switchToOfficeMode()
{
cout << "切换办公模式" << endl;
processClicks(m_officeLocations);
}
void processClicks(const vector<vector<int>>& locations)
{
int index = 0;
for (auto& row : locations)
{
if (row.size() < 2)
{
cout << "无效位置" << endl;
continue;
}
cout << "当前点击位置 (" << row[0] << ", " << row[1] << ")" << endl;
SetCursorPos(row[0], row[1]);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);//模拟鼠标左键
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
delayFunction(index < m_intervalTimes.size() ? m_intervalTimes[index++] : DEFAULT_DELAY);
}
}
};
int main()
{
int mode_seclect;
vector<vector<int>> balenceLocations = {
{1318, 1413},
{937, 704},
{928, 304},
{1406, 444},
{1133, 307},
{1444, 800},
{2360, 1288}
};//平衡模式位置数组
vector<vector<int>> officeLocations = {
{700, 800},
{900, 1000},
{1100, 1200}
};
vector<int> times = { 20000, 4000, 4000 ,4000,4000,10000};//延迟时间数组
cout << "请输入0切换平衡模式,输入1切换办公模式: ";
cin >> mode_seclect;
if (cin.fail() || (mode_seclect != 0 && mode_seclect != 1))
{
cout << "无效输入,请输入0或1切换模式" << endl;
return 1;
}
modeSwitch ms(balenceLocations, officeLocations, times);
ms.switchMode(static_cast<Mode>(mode_seclect));
return 0;
}
位置数组可以通过微信截图工具获得