C++ 如何以正确的方式模拟原始输入/向应用程序发送WM_输入消息?
我试图向应用程序发送WM_输入消息,但遇到了一些我无法解决的障碍。 我创建了如下所示的RAWINPUT结构:C++ 如何以正确的方式模拟原始输入/向应用程序发送WM_输入消息?,c++,windows,visual-c++,keyboard-events,raw-input,C++,Windows,Visual C++,Keyboard Events,Raw Input,我试图向应用程序发送WM_输入消息,但遇到了一些我无法解决的障碍。 我创建了如下所示的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 &
//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
//尝试发送“W”
RAWINPUT raw={0};
字符c='W';
//标题
raw.header.dwSize=sizeof(原始);
raw.header.dwType=RIM\u type键盘;
raw.header.wParam=0//(wParam&0xff=0=>0)
raw.header.hDevice=hDevice;
//资料
raw.data.keyboard.Reserved=0;
raw.data.keyboard.Flags=RI\u KEY\u MAKE//按下键
raw.data.keyboard.MakeCode=static_cast(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;/???
//发送消息
SendMessage(hPSWnd,WM_输入,0,(LPRAM)原始/*原始输入句柄*/)//TODO:原始输入的句柄
我被卡在至少两个位置:
raw.data.keyboard.ExtraInformation
传递特殊信息,或者是GetMessageExtraInfo()
,或者不需要在此处传递任何信息WM\u输入进行实验
WM_INPUT-message的LPARAM参数包含RAWINPUT结构的句柄,而不是地址或结构本身。。。如何创建这样的句柄
这是一个非常古老的API,它希望您使用其中一个基于句柄的内存管理器中的句柄
HGLOBAL hRaw = ::GlobalAlloc(GHND, sizeof(RAWINPUT));
RAWINPUT *pRaw = reinterpret_cast<RAWINPUT*>(::GlobalLock(hRaw));
// initialize the structure using pRaw
::GlobalUnlock(hRaw);
// use hRaw as the LPARAM
HGLOBAL hRaw=::GlobalAlloc(GHND,sizeof(RAWINPUT));
RAWINPUT*pRaw=重新解释铸件(::GlobalLock(hRaw));
//使用pRaw初始化结构
::GlobalUnlock(hRaw);
//使用hRaw作为LPRAM
您确定不想使用SendInput
功能吗?