Raw Input API 怎么模拟键盘和鼠标的呢C++ 需要绕过消息机制
要使用Raw Input API模拟键盘和鼠标,可以使用以下步骤:
-
使用RegisterRawInputDevices函数注册原始输入设备,以便操作系统将输入设备的数据发送给应用程序。
-
在消息循环中使用GetRawInputData函数获取输入数据。
-
使用SendInput函数模拟键盘和鼠标输入。
以下是一个简单的示例代码:
#include <Windows.h>
int main()
{
// 注册原始输入设备
RAWINPUTDEVICE rid[2];
rid[0].usUsagePage = 0x01; // Generic Desktop
rid[0].usUsage = 0x06; // Keyboard
rid[0].dwFlags = RIDEV_NOLEGACY;
rid[0].hwndTarget = NULL;
rid[1].usUsagePage = 0x01; // Generic Desktop
rid[1].usUsage = 0x02; // Mouse
rid[1].dwFlags = RIDEV_NOLEGACY;
rid[1].hwndTarget = NULL;
if (!RegisterRawInputDevices(rid, 2, sizeof(RAWINPUTDEVICE)))
{
// 注册失败
return 0;
}
// 模拟键盘输入
INPUT input;
input.type = INPUT_KEYBOARD;
input.ki.wScan = MapVirtualKey('A', MAPVK_VK_TO_VSC);
input.ki.time = 0;
input.ki.dwFlags = 0;
input.ki.dwExtraInfo = 0;
input.ki.wVk = 0;
SendInput(1, &input, sizeof(INPUT));
// 模拟鼠标输入
input.type = INPUT_MOUSE;
input.mi.dx = 100;
input.mi.dy = 100;
input.mi.mouseData = 0;
input.mi.dwFlags = MOUSEEVENTF_MOVE;
input.mi.time = 0;
input.mi.dwExtraInfo = 0;
SendInput(1, &input, sizeof(INPUT));
return 0;
}
需要注意的是,使用Raw Input API模拟输入不会绕过消息机制,而是通过模拟输入设备数据触发消息。因此,应用程序需要处理输入设备的消息才能正确响应模拟输入
原文地址: https://www.cveoy.top/t/topic/c2bl 著作权归作者所有。请勿转载和采集!