获取同步键状态 多个字符

本文关键字:字符 状态 同步 获取 | 更新日期: 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是错误的功能。