Управление мышкою в консоли С++

Как я могу обработать нажатие левой и правой кнопки мыши на какой-то символ в консоли Windows?


Ответы (2 шт):

Автор решения: ТарасПрогер

Если вы хотите реализовать нажатие на колесико мыши в консоли, нажатие на правую кнопку или левую, а также узнать координаты, вам нужно:

#include <Windows.h>
#include <iostream>
using namespace std;

int main()
{
    HANDLE hin = GetStdHandle(STD_INPUT_HANDLE); // получаем дескриптор
    INPUT_RECORD InputRecord; // используется для возвращения информации о входных сообщениях в консольном входном буфере
    DWORD Events; // unsigned long
    COORD coord; // для координат X, Y

    /*Запретить выделение консоли*/
    DWORD prev_mode;
    GetConsoleMode(hin, &prev_mode);
    SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), ENABLE_EXTENDED_FLAGS | (prev_mode & ~ENABLE_QUICK_EDIT_MODE));

    SetConsoleMode(hin, ENABLE_MOUSE_INPUT); // разрешаем обработку мыши

    while (true) 
    {
        ReadConsoleInput(hin, &InputRecord, 1, &Events); // считывание 

        if (InputRecord.Event.MouseEvent.dwButtonState == MOUSE_WHEELED) // нажато колесико
        {
            coord.X = InputRecord.Event.MouseEvent.dwMousePosition.X;
            coord.Y = InputRecord.Event.MouseEvent.dwMousePosition.Y;
            cout << "Kolesiko nazhato - X" << coord.X << ", Y = " << coord.Y << endl;
        }
        else if (InputRecord.Event.MouseEvent.dwButtonState == RIGHTMOST_BUTTON_PRESSED) // правая кнопка
        {
            coord.X = InputRecord.Event.MouseEvent.dwMousePosition.X;
            coord.Y = InputRecord.Event.MouseEvent.dwMousePosition.Y;
            cout << "right - X" << coord.X << ", Y = " << coord.Y << endl;
        }
        else if (InputRecord.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED) // левая кнопка
        {
            coord.X = InputRecord.Event.MouseEvent.dwMousePosition.X;
            coord.Y = InputRecord.Event.MouseEvent.dwMousePosition.Y;
            cout << "left - X" << coord.X << ", Y = " << coord.Y << endl;
        }

    }

    return 0;
}
→ Ссылка
Автор решения: Гость
#include <iostream> 
#include <windows.h>

int main() { 

    POINT mous;

    while (true) {

        GetCursorPos(&mous);
        ScreenToClient( GetConsoleWindow(), &mous);         
                    // hwnd = CreateWindow(...)     
                    // hwnd = GetConsoleWindow()
        // VK_LBUTTON VK_RBUTTON VK_MBUTTON VK_XBUTTON1 VK_XBUTTON2
        std::cout << mous.x << "  \t" << mous.y << "  \t" 
            << GetKeyState(VK_LBUTTON) << "  \r";
    }
}
→ Ссылка