【发布时间】:2013-11-30 15:48:14
【问题描述】:
我正在尝试向应用程序发送 WM_INPUT 消息,但遇到了一些我无法解决的障碍。 我创建了如下所示的 RAWINPUT 结构:
//try sending 'W'
RAWINPUT raw = {0};
char c = 'W';
//header
raw.header.dwSize = sizeof(raw);
raw.header.dwType = RIM_TYPEKEYBOARD;
raw.header.wParam = 0; //(wParam & 0xff =0 => 0)
raw.header.hDevice = hDevice;
//data
raw.data.keyboard.Reserved = 0;
raw.data.keyboard.Flags = RI_KEY_MAKE; //Key down
raw.data.keyboard.MakeCode = static_cast<WORD>(MapVirtualKeyEx(c, MAPVK_VK_TO_VSC, GetKeyboardLayout(0)));
raw.data.keyboard.Message = WM_KEYDOWN;
raw.data.keyboard.VKey = VkKeyScanEx(c, GetKeyboardLayout(0));
raw.data.keyboard.ExtraInformation = 0; //???
//Send the message
SendMessage(hPSWnd, WM_INPUT, 0, (LPARAM)raw/*Raw input handle*/); //TODO: Handle to raw input
我卡在至少两个位置:
是否需要传递一些特殊的东西给
raw.data.keyboard.ExtraInformation,或者是GetMessageExtraInfo(),或者这里不需要传递任何东西?WM_INPUT 消息的 LPARAM 参数包含指向 RAWINPUT 结构的句柄,而不是地址或结构本身...如何创建这样的句柄?
我不想使用 SendInput,因为它要求窗口是活动窗口。 我已经这样做了,而且效果很好,但是当我激活另一个窗口时 - 当然 - 它停止在前一个窗口上工作。
所以我想要实现的是,将输入发送到不需要成为活动应用程序的应用程序。
【问题讨论】:
-
您确定不想使用
SendInput函数吗?
标签: c++ windows visual-c++ keyboard-events raw-input