c++ - 使用 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);
}
解决方案
与基于 MS-DOS 的应用程序不同,基于 Windows 的应用程序是事件驱动的。它们不会进行显式函数调用(例如 C 运行时库调用)来获取输入。相反,他们等待系统将输入传递给他们。系统将应用程序的所有输入传递到应用程序中的各个窗口。
每个窗口都有一个函数,称为窗口过程,系统在有窗口输入时调用该函数。窗口过程处理输入并将控制返回给系统。
您的代码只是实现等待窗口消息和处理主题的 WindowProc,使用实现函数的参数可以获得接收到的消息的信息。
您可以在此处找到有关 Windows 消息传递系统的有用信息。
例如,这里是WM_SYSKEYDOWN的文档 。
以及WindowProc的文档。
仔细阅读文档,帮助您了解 Windows 消息传递系统背后的底层系统。
推荐阅读
- sql - Oracle SQL:为列中的每个值创建一个新行,其中更多值用逗号分隔
- assembly - Raspberry Pi 4 的正确 .cpu、.fpu 程序集条目是什么
- flutter - Flutter 小部件未正确交换其位置
- python - 如何单击 selenium python 中的保存按钮?不断收到 StaleElementReferenceException
- php - Nested function inside While loop - PHP
- beautifulsoup - Python bs4 提取正确的表格内容
- javascript - 如何获取具有两个动态变量的 JSON 数据?
- android - RSA 没有正常工作
- html - 单击时如何仅更改离子列表中的一种离子项颜色?
- python-3.x - 导入 CSV 作为数据库 Django