问题标题: 自动点击(!非连点器!)

0
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追加了内容

亲测有效


0
0
0
毕博雨
毕博雨
中级光能
中级光能

好深奥的样子

不懂

0
0
谈睿
谈睿
初级光能
初级光能

一点都看不懂(代码)……

我要回答