在 C++ 中,可以使用 Raw Input API 接收鼠标和键盘数据。以下是一个简单的示例代码,可以接收键盘输入并输出到控制台:

#include <Windows.h>

int main()
{
    RAWINPUTDEVICE Rid[1];
    Rid[0].usUsagePage = 0x01;
    Rid[0].usUsage = 0x06;
    Rid[0].dwFlags = RIDEV_INPUTSINK;
    Rid[0].hwndTarget = NULL;
    if (!RegisterRawInputDevices(Rid, 1, sizeof(Rid[0])))
    {
        return 1;
    }

    while (true)
    {
        MSG msg;
        GetMessage(&msg, NULL, 0, 0);
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return 0;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_INPUT:
        {
            UINT dwSize = 0;
            GetRawInputData((HRAWINPUT)lParam, RID_INPUT, NULL, &dwSize, sizeof(RAWINPUTHEADER));
            LPBYTE lpb = new BYTE[dwSize];
            if (lpb == NULL)
            {
                return 0;
            }
            if (GetRawInputData((HRAWINPUT)lParam, RID_INPUT, lpb, &dwSize, sizeof(RAWINPUTHEADER)) != dwSize)
            {
                delete[] lpb;
                return 0;
            }
            RAWINPUT* raw = (RAWINPUT*)lpb;
            if (raw->header.dwType == RIM_TYPEKEYBOARD)
            {
                if (raw->data.keyboard.Flags == RI_KEY_MAKE)
                {
                    printf('%c', MapVirtualKey(raw->data.keyboard.VKey, MAPVK_VK_TO_CHAR));
                }
            }
            delete[] lpb;
            break;
        }
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

在上面的代码中,首先使用RegisterRawInputDevices函数注册一个 RAWINPUTDEVICE,表示我们要接收键盘输入。然后,在一个无限循环中使用GetMessage函数获取消息,并使用TranslateMessageDispatchMessage函数将消息传递给窗口过程函数WndProc

WndProc函数中,如果收到WM_INPUT消息,就使用GetRawInputData函数获取 RAWINPUT 数据,并判断它是否是键盘输入。如果是键盘输入,就将键盘码转换为字符并输出到控制台。

C++ 使用 Raw Input API 接收鼠标和键盘数据

原文地址: https://www.cveoy.top/t/topic/ngmG 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录