-->

获得使用GetKeys功能键盘状态(Getting keyboard state using Get

2019-09-19 10:38发布

有谁知道如何获得通过GetKeys功能的按键状态(按下或没有)? 换句话说如何处理这种功能:

bool result = isPressed(kVK_LeftArrow);

谢谢。

Answer 1:

KeyMap类型是一个整数数组,但其实际布局是一系列比特,每个键代码之一。 对于一个特定的键的比特数大于所述虚拟键码少一个

由于比特移位是不合法的非常大的值(例如,你不能只要求编译器到移位74个比特), KeyMap类型被分成4个部分。 你需要采取虚拟键码的位数和整数除以32来找到该位正确的整数; 然后取余数来找出哪些位应设置。

所以,试试这个:

uint16_t vKey = kVK_LeftArrow;
uint8_t index = (vKey - 1) / 32;
uint8_t shift = ((vKey - 1) % 32);
KeyMap keyStates;
GetKeys(keyStates);
if (keyStates[index] & (1 << shift))
{
    // left arrow key is down
}


文章来源: Getting keyboard state using GetKeys function