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