获取同步键状态 多个字符
本文关键字:字符 状态 同步 获取 | 更新日期: 2023-09-27 18:32:52
我对GetAsyncKeyState有问题。
public static void GetKey()
{
string keyBuffer = "";
foreach (System.Int32 i in Enum.GetValues(typeof(Keys)))
{
if (Enum.GetName(typeof(Keys), i) != "LButton")
{
int x = GetAsyncKeyState(i);
if ((x == 1) || (x == -32767) || (x == -32768))
{
keyBuffer += Enum.GetName(typeof(Keys), i) + " ";
Object ki = Enum.ToObject(typeof(Keys), i);
if (keyBuffer == "LButton")
{
}
if (keyBuffer == "RButton")
{
}
if (keyBuffer == "LShiftKey")
{
}
if (keyBuffer == "RShiftKey")
{
}
if (keyBuffer == "RMouse")
{
}
if (keyBuffer == "LMouse")
{
}
else
{
Console.WriteLine(ki);
}
}
}
}
问题是当我将代码更改为以下代码时,我得到了多个密钥:
if ((x == 1) || (x == -32767))
我只按下了一个,但我没有从 Excel 获得键。
看看你的代码,我看到了几个问题。
GetAsyncKeyState
返回一个有符号的 16 位short
。如果你没有这样定义它,你应该改变你的定义。我之所以这样说,是因为我注意到您使用int
来保存返回值,并想知道您是否正确声明了该函数。
我在代码中看到的另一个问题是您测试密钥是否不正确。测试返回值是否为负数以检查键是否关闭:
if (GetAsyncKeyState(...) < 0)
{
// key is down
}
除此之外,我希望您在使用GetAsyncKeyState
时是错误的.从您的评论来看,您正在尝试阅读文本输入,GetAsyncKeyState
是错误的功能。