使用 GetasyncKeyState 获取 C++ 中的小写字母

get lowercase letters in c++ using getasynckeystate

本文关键字:小写字 C++ GetasyncKeyState 获取 使用      更新时间:2023-10-16
当我

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

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

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

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 后按下该键。但是,您不应依赖最后一种行为;