使用 2 个鼠标按钮激活和停用 `while` 循环

Activating and deactivating `while` loop with 2 mouse buttons

我想用 2 个鼠标按钮激活 while 循环。

第一个按钮应该启动和停止,第二个按钮应该停止和重置。

有效,但我无法重置第一个按钮。

我尝试了很多 GetKeyState()GetAsyncKeyState() 变体。

bool loopy = false;

int main()
{
    while (true) {
        if (GetKeyState(VK_XBUTTON2) > 0) {
            loopy = true;
        }
        else {
            loopy = false;
        }

        if (GetKeyState(VK_XBUTTON1) < 0) {
            loopy = false;
            // BYTE keystate[256] = { 0 };
            // SetKeyboardState(keystate);
        }

        if (loopy) {
            // do stuff...
        }
    }
}

解决方案,如果有人感兴趣:)

bool loopy = false;

LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (wParam == WM_XBUTTONDOWN) {
        if (HIWORD(((PMSLLHOOKSTRUCT)lParam)->mouseData) == XBUTTON2)
        {
            loopy = !loopy;
            return true;
        }
        else if (HIWORD(((PMSLLHOOKSTRUCT)lParam)->mouseData) == XBUTTON1)
        {
            loopy = false;
            return true;
        }
    }

    return CallNextHookEx(0, nCode, wParam, lParam);
}

DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
    while (true)
    {
        if (loopy)
        {
            // do stuff
        }
    }
}

int main(void)
{
    SetWindowsHookEx(WH_MOUSE_LL, LowLevelMouseProc, GetModuleHandle(0), 0);

    CreateThread(0, 0, ThreadProc, 0, 0, 0);

    while(GetMessage(0, 0, 0, 0));

    ExitProcess(EXIT_SUCCESS);
}

关键部分是:loopy = !loopy;