首页 > 解决方案 > 使用 windows API c++ 的键盘输入

问题描述

我真的需要一些帮助。我正在尝试使用 windows api 创建一个输入系统,但我真的不明白如何使用它。我得到了下面的代码

https://docs.microsoft.com/en-us/windows/desktop/learnwin32/keyboard-input

我知道它会根据按下的键返回某种结果,但是我如何真正获得从该函数返回的结果?我该如何使用它?任何帮助,将不胜感激。

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    wchar_t msg[32];
    switch (uMsg)
    {
    case WM_SYSKEYDOWN:
        swprintf_s(msg, L"WM_SYSKEYDOWN: 0x%x\n", wParam);
        OutputDebugString(msg);
        break;

    case WM_SYSCHAR:
        swprintf_s(msg, L"WM_SYSCHAR: %c\n", (wchar_t)wParam);
        OutputDebugString(msg);
        break;

    case WM_SYSKEYUP:
        swprintf_s(msg, L"WM_SYSKEYUP: 0x%x\n", wParam);
        OutputDebugString(msg);
        break;

    case WM_KEYDOWN:
        swprintf_s(msg, L"WM_KEYDOWN: 0x%x\n", wParam);
        OutputDebugString(msg);
        break;

    case WM_KEYUP:
        swprintf_s(msg, L"WM_KEYUP: 0x%x\n", wParam);
        OutputDebugString(msg);
        break;

    case WM_CHAR:
        swprintf_s(msg, L"WM_CHAR: %c\n", (wchar_t)wParam);
        OutputDebugString(msg);
        break;

    /* Handle other messages (not shown) */

    }
    return DefWindowProc(m_hwnd, uMsg, wParam, lParam);
}

标签: c++windowsapiinput

解决方案


与基于 MS-DOS 的应用程序不同,基于 Windows 的应用程序是事件驱动的。它们不会进行显式函数调用(例如 C 运行时库调用)来获取输入。相反,他们等待系统将输入传递给他们。系统将应用程序的所有输入传递到应用程序中的各个窗口。

每个窗口都有一个函数,称为窗口过程,系统在有窗口输入时调用该函数。窗口过程处理输入并将控制返回给系统。

您的代码只是实现等待窗口消息和处理主题的 WindowProc,使用实现函数的参数可以获得接收到的消息的信息。

您可以在此处找到有关 Windows 消息传递系统的有用信息。

例如,这里是WM_SYSKEYDOWN的文档 。

以及WindowProc的文档。

仔细阅读文档,帮助您了解 Windows 消息传递系统背后的底层系统。


推荐阅读