Получить кнопку мыши Нажмите - PullRequest
1 голос
/ 08 мая 2020

Я пытаюсь обнаружить щелчки кнопок мыши. Я проверил документацию на веб-сайте Microsoft и обнаружил, что мы можем использовать функцию GetKeyState для обнаружения щелчков кнопок, вот мой код.

Не уверен, что я делаю не так, но я у меня ничего не печатается в моем выводе, когда я нажимаю кнопки.

#include <windows.h>
#include <iostream>
#include "stdafx.h"

using namespace std;

void CheckMouseButtonStatus()
{
    //Check the mouse left button is pressed or not
    if ((GetKeyState(VK_LBUTTON) & 0x80) != 0)
    {
        cout << "left button pressed" << endl;
    }
    //Check the mouse right button is pressed or not
    if ((GetKeyState(VK_RBUTTON) & 0x80) != 0)
    {
        cout << "right button pressed" << endl;
    }
}

только что нашел видео на YouTube, о котором рассказывал приятель, и я попробовал, все равно ничего не было на выходе

int main()
{
    //Check the mouse left button is pressed or not
    if ((GetAsyncKeyState(VK_LBUTTON) & 0x80) != 0)
    {
        cout << "left button pressed" << endl;
    }
    //Check the mouse right button is pressed or not
    if ((GetAsyncKeyState(VK_RBUTTON) & 0x80) != 0)
    {
        cout << "right button pressed" << endl;
    }
}

Этот работал, но с некоторыми осложнениями -

int main()
{
    while (true) {
        //Check the mouse left button is pressed or not
        if (GetAsyncKeyState(VK_LBUTTON))
        {
            cout << "left button pressed" << endl;
        }
        //Check the mouse right button is pressed or not
        if (GetAsyncKeyState(VK_RBUTTON))
        {
            cout << "right button pressed" << endl;
        }
    }

}

1 Ответ

0 голосов
/ 29 июня 2020

Используйте GetAsyncKeyState () и используйте побитовое И, чтобы проверить, установлен ли младший значащий бит, это указывает на новое нажатие клавиши, а не на то, которое было обнаружено ранее.

#include <windows.h>
#include <iostream>

int main()
{
    while (true)
    {
        //Check the mouse left button is pressed or not
        if (GetAsyncKeyState(VK_LBUTTON) & 1)
        {
            std::cout << "left button pressed" << std::endl;
        }
        //Check the mouse right button is pressed or not
        if (GetAsyncKeyState(VK_RBUTTON) & 1)
        {
            std::cout << "right button pressed" << std::endl;
        }

    }
    return 0;
}

GetAsyncKeyState отлично подходит для простых целей тестирования и обучения, но лучше всего использовать обычную очередь сообщений Windows для любого обнаружения ввода. Имейте в виду, что GAKS глобален, он обнаруживает нажатия клавиш во всех процессах, а не только в вашем. Прочтите примечания в MSDN, потому что иногда это может вызвать проблемы.

...