使用getasynckeystate在c ++中获取小写字母

时间:2013-11-08 11:52:44

标签: c++ winapi

我在使用getasynckeystate写入文件时尝试获取小写字母,但我无法这样做,我也无法编写@$等符号,这是我正在使用的代码。我尝试使用GetKeyState,但这也不起作用,WM_KEYDOWN也没有。

if( GetAsyncKeyState(i) == -32767 )
{
    save(i, "keys.txt");
}

它以大写字母保存所有内容,当我尝试使用shift +任意数字键时,没有保存符号。

1 个答案:

答案 0 :(得分:1)

GetAsyncKeyState()可以使用或多或少的物理按键。它无法告诉你大小写的区别,因为它仍然是相同的键(即“a”和“A”是键盘上的相同键)。要确定大小写,需要考虑移位和大写锁定,以及键盘布局和本地化。类似的问题会影响几个符号,例如@和$。它们在布局和区域设置之间变化太大。

要获取案例信息和其他特定于语言环境的内容,您需要将WM_CHARTranslateMessage()结合使用。但是,对于非字符键,您仍然需要WM_KEYDOWNWM_KEYUP,例如Delete和F1-12。您可以在此处从MSDN获取更多信息:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms646268(v=vs.85).aspx

作为旁注,您在技术上错误地检查了GetAsyncKeyState()的返回值。简单地将结果与-32767进行比较可能并不可靠。从有关返回值的文档:

  

如果设置了最高有效位,则键为关闭,如果设置了最低有效位,则在上一次调用GetAsyncKeyState之后按下该键。但是,你不应该依赖这最后的行为;