0
倪雨泽
高级光能
高级光能
引文:
- 近日突发奇想,想制作一份工具,用于刷新网页
- 于是乎我也是使用了朋友的AI网站(毕竟我是蒟蒻,自己完成不了)
就得到了这么一份程序
#include <iostream>
#include <windows.h>
#include <thread>
#include <atomic>
#include <chrono>
#include <iomanip>
// 使用原子布尔值来控制程序的运行和暂停状态
std::atomic<bool> running(true);
std::atomic<bool> paused(false);
// 鼠标点击函数
void MouseClick(int x, int y, int& clickCount) {
SetCursorPos(x, y);
INPUT input = { 0 };
input.type = INPUT_MOUSE;
input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
SendInput(1, &input, sizeof(INPUT));
ZeroMemory(&input, sizeof(INPUT));
input.type = INPUT_MOUSE;
input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
SendInput(1, &input, sizeof(INPUT));
// 增加点击计数
clickCount++;
// 获取当前时间
auto now = std::chrono::system_clock::now();
std::time_t now_time = std::chrono::system_clock::to_time_t(now);
std::tm local_tm = *std::localtime(&now_time);
// 输出点击信息
std::cout << "第 " << clickCount << " 次点击: "
<< std::put_time(&local_tm, "%Y-%m-%d %H:%M:%S") << "\n";
}
// 检测Shift+C的按键
bool IsShiftCPressed() {
return (GetAsyncKeyState(VK_SHIFT) & 0x8000) && (GetAsyncKeyState('C') & 0x8000);
}
// 点击线程
void ClickThread(int x, int y) {
int clickCount = 0;
while (running) {
if (!paused) {
MouseClick(x, y, clickCount);
std::this_thread::sleep_for(std::chrono::seconds(10));
}
}
}
// 处理Esc键的状态函数
void HandleEscPress() {
auto start_time = std::chrono::steady_clock::now();
while (GetAsyncKeyState(VK_ESCAPE) & 0x8000) {
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
auto end_time = std::chrono::steady_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end_time - start_time).count();
// 判断是长按还是短按,假设长按为2秒
if (duration > 2000) {
running = false;
} else {
paused = !paused;
if (paused) {
std::cout << "程序已暂停。\n";
} else {
std::cout << "程序已继续。\n";
}
}
}
int main() {
POINT pt;
std::cout << "请将鼠标移动到目标位置并按下Shift+C进行选择。\n";
// 等待Shift+C
while (!IsShiftCPressed()) {
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
// 获取当前鼠标位置
GetCursorPos(&pt);
std::cout << "位置已选择: (" << pt.x << ", " << pt.y << ")。\n";
// 启动点击线程
std::thread clicker(ClickThread, pt.x, pt.y);
// 主线程检测Esc按键
while (running) {
if (GetAsyncKeyState(VK_ESCAPE) & 0x8000) {
HandleEscPress();
}
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
// 结束程序
if (clicker.joinable()) {
clicker.join();
}
std::cout << "程序已终止。\n";
return 0;
}
按下shift+c
确定坐标(点击位置),后每隔10秒自动点击
按下esc
暂停,再按继续。长按esc结束(不过好像没那么令,建议直接关掉窗口即可)
倪雨泽在2024-11-17 21:37:54追加了内容