C ++和GetAsyncKeyState()函数

时间:2010-11-16 10:32:16

标签: c++ key winapi

因为它只提供大写字母,任何想法如何获得小写? 如果用户同时pessed SHIFT + K或CAPSLOCK等,我想得到更小的案例.. 是这样还是别的?

谢谢,

2 个答案:

答案 0 :(得分:3)

假设“c”是您放入GetAsyncKeyState()的变量。

您可以使用以下方法检测是否应打印大写字母或小写字母。

string out = "";

bool isCapsLock() { // Check if CapsLock is toggled
    if ((GetKeyState(VK_CAPITAL) & 0x0001) != 0) // If the low-order bit is 1, the key is toggled
        return true;
    else
        return false;
}

bool isShift() {  // Check if shift is pressed
    if ((GetKeyState(VK_SHIFT) & 0x8000) != 0) // If the high-order bit is 1, the key is down; otherwise, it is up.
        return true;
    else
        return false;
}

if (c >= 65 && c <= 90) { // A-Z
    if (!(isShift() ^ isCapsLock())) { // Check if the letter should be lower case
        c += 32;  // in ascii table A=65, a=97. 97-65 = 32
}
out = c;

答案 1 :(得分:2)

正如您正确指出的那样,它代表一个关键,而不是大写或小写。因此,或许对:: GetASyncKeyState(VK_SHIFT)的另一个调用可以帮助您确定shift键是否已关闭,然后您将能够适当地修改后续调用的结果。