结束极域

· · 个人记录

#include <windows.h>
#include <string>
#include <cstdlib>
#include <thread>
#include <chrono>

void ExecuteCommand(const std::wstring& command) {
    _wsystem(command.c_str());
}

// 检查鼠标左右键是否同时按下
bool AreBothMouseButtonsPressed() {
    // 获取鼠标状态
    bool leftPressed = (GetAsyncKeyState(VK_LBUTTON) & 0x8000) != 0;
    bool rightPressed = (GetAsyncKeyState(VK_RBUTTON) & 0x8000) != 0;

    return leftPressed && rightPressed;
}

// 检查鼠标中键是否按下
bool IsMiddleMouseButtonPressed() {
    return (GetAsyncKeyState(VK_MBUTTON) & 0x8000) != 0;
}

// 检查键盘按键是否按下
bool IsKeyPressed(int vk) {
    return (GetAsyncKeyState(vk) & 0x8000) != 0;
}

int main() {
    std::wstring killCommand = L"taskkill /f /t /im StudentMain.exe";
    std::wstring startCommand = L"start \"\" \"C:\\Program Files (x86)\\Mythware\\StudentMain.exe\"";

    bool wasKillTriggered = true;

    while (true) {
        // 检查鼠标左右键是否同时按下(结束程序)
        if (AreBothMouseButtonsPressed() && !wasKillTriggered) {
            ExecuteCommand(killCommand);
            wasKillTriggered = true;
            std::this_thread::sleep_for(std::chrono::milliseconds(500)); // 防抖
        }

        // 检查鼠标中键是否按下(启动程序)
        if (IsMiddleMouseButtonPressed() && wasKillTriggered) {
            ExecuteCommand(startCommand);
            wasKillTriggered = false;
            std::this_thread::sleep_for(std::chrono::milliseconds(500)); // 防抖
        }

        // 检查上下键是否同时按下(隐藏屏幕广播窗口)
        if (IsKeyPressed(VK_UP) && IsKeyPressed(VK_DOWN)) {

            HWND hwnd = FindWindow(NULL, "屏幕广播");
            if (hwnd) {
                // 切换窗口显示状态
                while (1) {
                    ShowWindow(hwnd, false);
                    // 检查左右键是否同时按下(显示屏幕广播窗口)
                    if (IsKeyPressed(VK_LEFT) && IsKeyPressed(VK_RIGHT)) {
                        HWND hwnd = FindWindow(NULL, "屏幕广播");
                        if (hwnd) ShowWindow(hwnd, true);
                        break; 
                    }

                    // 检查鼠标左右键是否同时按下(结束程序)
                    if (AreBothMouseButtonsPressed() && !wasKillTriggered) {
                        ExecuteCommand(killCommand);
                        wasKillTriggered = true;
                        std::this_thread::sleep_for(std::chrono::milliseconds(500)); // 防抖
                        break;
                    }

                    // 短暂延迟,降低CPU使用率
                    std::this_thread::sleep_for(std::chrono::microseconds(1));
                }
            }
        }

        // 短暂延迟,降低CPU使用率
        std::this_thread::sleep_for(std::chrono::milliseconds(50));
    }

    return 0;
}