gpt4 book ai didi

C++ 从虚拟键从 A 到 Z

转载 作者:行者123 更新时间:2023-11-30 03:45:06 26 4
gpt4 key购买 nike

比这个更简单的代码?

根据微软website , 有一些常量只会增加数字(例如 0x41 是 a,旁边是 b,它是 0x42)但有些不是(例如 0x49 是 I,但旁边是 0x4A,它是 J)。

如何使用该模式简化此代码?当然,我不想把所有这些字符都从 A 到 Z 写下来。

bool CharIsPressed(int getKey)
{
switch (getKey)
{
case 0x41:
if (GetAsyncKeyState(VK_SHIFT))
WriteKey("A");
else
WriteKey("a");
break;
case 0x42:
if (GetAsyncKeyState(VK_SHIFT))
WriteKey("B");
else
WriteKey("b");
break;
case 0x43:
if (GetAsyncKeyState(VK_SHIFT))
WriteKey("C");
else
WriteKey("c");
break;
case 0x44:
if (GetAsyncKeyState(VK_SHIFT))
WriteKey("D");
else
WriteKey("d");
break;
case 0x45:
if (GetAsyncKeyState(VK_SHIFT))
WriteKey("E");
else
WriteKey("e");
break;
default: return FALSE;
}
}

注意:WriteKey() 函数要求的是 LPCSTR,而不是 string

注意:getkey来自char key;返回ASCII码

最佳答案

字母的虚拟键码与大写字母的ASCII码相同。我不明白你在 I/J 示例中的意思,0x4a = 0x49 + 1。

你的代码可以这样简化

bool CharIsPressed(int getKey)
{
char buf[2]=" ";
if('A'<=getKey && getKey<='Z') {
if(GetAsyncKeyState(VK_SHIFT) & 0x8000) buf[0]=getKey;
else buf[0]=getKey+('a'-'A');
WriteKey(buf);
return true;
}
return false;
}

顺便说一句,您的原始代码在匹配字母时错过了 return(这是未定义的行为),并返回 FALSE 而不是 false另一个分支(最终结果是相同的,但是 FALSE 通常用于 Win32 BOOL 类型,而 false 是“真实的” C++ bool 字面量)。

关于C++ 从虚拟键从 A 到 Z,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35054849/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com