- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想捕捉发送到我的窗口的按键以存储每个键的状态,并区分键的左右实例,如 WM_LCONTROL
和 WM_RCONTROL
.
因为 WM_KEYUP/DOWN
不提供此功能,所以我转向原始输入,我需要处理 WM_INPUT
。
问题是来自 RAWKEYBOARD
结构的标志,描述为 here ,不要像他们应该的那样工作。
当我按下右控制键时,RI_KEY_E0
被设置为左版本键,当我按下左控制键时,RI_KEY_E0
和 RI_KEY_E1
均未设置。alt 键的执行方式类似,但我可以解决这个问题,因为左键仍然提供与右键不同的标志。
但是对于左右 shift 键,没有设置任何标志来区分左版本和右版本,所以我无法对它们做任何事情。
WM_INPUT
到达时给出的虚拟键码不区分左右键,在扫描码上使用MapVirtualKey
也不起作用。
原始输入的这种非正统行为是怎么回事?
部分代码:
注册:
RAWINPUTDEVICE rid;
rid.usUsagePage=0x01;
rid.usUsage=0x06;
rid.dwFlags=0; // I also tried RIDEV_APPKEYS,RIDEV_NOHOTKEYS,RIDEV_NOLEGACY, none fixed the problem
rid.hwndTarget=hwnd;
if(!RegisterRawInputDevices(&rid,1,sizeof(RAWINPUTDEVICE)))
ExitError("Failed to register raw input device",true); //displays error and exits
处理 WM_INPUT:
case WM_INPUT:
{
RAWINPUT rw;
UINT sz=sizeof(rw);
u_char vk; //used to make code shorter
USHORT flag; //used to make code shorter
if(!GetRawInputData((HRAWINPUT)lparam,RID_INPUT,&rw,&sz,sizeof(RAWINPUTHEADER)))
break;
vk=rw.data.keyboard.VKey;
flag=rw.data.keyboard.Flags;
...Process flags and save the actual key pressed in vk...
keys[vk]=!(flag&RI_KEY_BREAK); //save key's state
break;
}
最佳答案
WM_KEYDOWN/-UP
确实提供了您想要的信息,您只需阅读 MSDN 中的说明即可。
检查 lParam 参数的第 24 位。
关于c++ - WM_INPUT 有缺陷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10652713/
我想捕捉发送到我的窗口的按键以存储每个键的状态,并区分键的左右实例,如 WM_LCONTROL 和 WM_RCONTROL. 因为 WM_KEYUP/DOWN 不提供此功能,所以我转向原始输入,我需要
我有以下代码: Area here jQuery: $('#area').on('mouseenter', function(event){ $('#area').addC
这个问题在这里已经有了答案: Why does a RegExp with global flag give wrong results? (7 个答案) 关闭 7 个月前。 我向你保证我没有说谎。
我想知道以下问题的答案。 1) 如果我尝试使用 AVAudioSession 播放音频,而 iphone 扬声器有故障/有缺陷/不工作,会发生什么情况? 2) 有什么方法可以通过程序检查扬声器是正常工
我是一名优秀的程序员,十分优秀!