使用GetKeys函数获取键盘状态

时间:2012-07-13 07:49:43

标签: macos cocoa macos-carbon core-foundation

有没有人知道如何通过GetKeys函数获取任何键状态(按下或否)? 换句话说,如何处理这个功能:

bool result = isPressed(kVK_LeftArrow);

三江源。

1 个答案:

答案 0 :(得分:4)

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
}