我在使用getasynckeystate
写入文件时尝试获取小写字母,但我无法这样做,我也无法编写@
和$
等符号,这是我正在使用的代码。我尝试使用GetKeyState
,但这也不起作用,WM_KEYDOWN
也没有。
if( GetAsyncKeyState(i) == -32767 )
{
save(i, "keys.txt");
}
它以大写字母保存所有内容,当我尝试使用shift +任意数字键时,没有保存符号。
答案 0 :(得分:1)
GetAsyncKeyState()
可以使用或多或少的物理按键。它无法告诉你大小写的区别,因为它仍然是相同的键(即“a”和“A”是键盘上的相同键)。要确定大小写,需要考虑移位和大写锁定,以及键盘布局和本地化。类似的问题会影响几个符号,例如@和$。它们在布局和区域设置之间变化太大。
要获取案例信息和其他特定于语言环境的内容,您需要将WM_CHAR
与TranslateMessage()
结合使用。但是,对于非字符键,您仍然需要WM_KEYDOWN
和WM_KEYUP
,例如Delete和F1-12。您可以在此处从MSDN获取更多信息:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646268(v=vs.85).aspx
作为旁注,您在技术上错误地检查了GetAsyncKeyState()
的返回值。简单地将结果与-32767进行比较可能并不可靠。从有关返回值的文档:
如果设置了最高有效位,则键为关闭,如果设置了最低有效位,则在上一次调用GetAsyncKeyState之后按下该键。但是,你不应该依赖这最后的行为;