-2

当我使用写入文件时,我试图获取小写字母,getasynckeystate但我无法这样做,我无法编写诸如@和之类的符号$,这是我正在使用的代码。我尝试过使用GetKeyState,但这也不起作用,WM_KEYDOWN.

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

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

4

1 回答 1

1

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

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

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

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

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

于 2013-11-08T12:15:33.680 回答