gpt4 book ai didi

c++ - 为什么按下的键的 dwControlKeyState 与常量不匹配?

转载 作者:太空宇宙 更新时间:2023-11-04 08:53:23 24 4
gpt4 key购买 nike

我正在尝试处理 Windows 7 中控制台的按键事件。当我按下左 ctrl 键时,我希望得到代码 0x0008 (0b00001000 - LEFT_CTRL_PRESSED),但我得到的不是这个,而是 0x0028 (0b00101000)。

...
DWORD n;
INPUT_RECORD ir;
HANDLE hin;
hin = GetStdHandler(STD_INPUT_HANDLE);
...
ReadConsoleInput(hin, &ir, 1, &n)...
...
if(ir.Event.KeyEvent.dwControlKeyState == LEFT_CTRL_PRESSED) {
// some code..
}

如果使用 xor 32 一切正常:

if((ir.Event.KeyEvent.dwControlKeyState ^ 32) == LEFT_CTRL_PRESSED) {
// some code..
}

额外的位在哪里?

p.s.: unicode 项目

最佳答案

dwControlKeyState 是位图。

dwControlKeyState 的单个位同时描述某些键的状态。

第 3 个(0 索引)位等于 0x008,表示按下了左 ctrl 键。

像这样测试它:

if (ir.Event.KeyEvent.dwControlKeyState & LEFT_CTRL_PRESSED) {
// some code..
}

有关此位图的完整说明,您可能想在 dwControlKeyState 下阅读此处:http://msdn.microsoft.com/en-us/library/windows/desktop/ms684166%28v=vs.85%29.aspx

关于c++ - 为什么按下的键的 dwControlKeyState 与常量不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18703276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com