【问题标题】:keyeventf_keyup not releasing keykeyeventf_keyup 不释放密钥
【发布时间】:2018-05-07 16:37:24
【问题描述】:

我正在尝试制作一个基于 C# 控制台的应用程序,当我按住鼠标中键时,它将按下并释放空格键。

该应用程序可在基于文本的应用程序(记事本、网络浏览器等)中运行,看看您如何只需按住空格键,它实际上会创建空间,但不能在游戏中。

例如,如果我按住中间按钮,它似乎没有注册 keyup 事件,这意味着我必须物理按下空格键才能再次“跳跃”。

代码如下:

    static void Main(string[] args)
    {
        Console.WriteLine("Press down the middle mouse button to jump.\n"
            + "Press F5 to pause the application.");


        while (true)
        {
            if ((GetAsyncKeyState(VK_MIDDLEBUTTON) & KEY_PRESSED) > 0)
            {
                SendInputWithAPI();
            }

            else if ((GetAsyncKeyState(VK_F5) & KEY_PRESSED) > 0)
            {
                PauseFunc();
            }

            Thread.Sleep(10);
        }
    }

    static void SendInputWithAPI()
    {
        INPUT[] Inputs = new INPUT[1];
        INPUT Input = new INPUT();

        Input.type = 1; // 1 = Keyboard Input
        Input.U.ki.wScan = ScanCodeShort.SPACE;
        Input.U.ki.dwFlags = KEYEVENTF.SCANCODE;
        Inputs[0] = Input;

        SendInput(1, Inputs, INPUT.Size);

        Random time = new Random();
        int randTime = time.Next(1, 4);

        Thread.Sleep(randTime);

        Input.U.ki.dwFlags = KEYEVENTF.KEYUP;
        SendInput(1, Inputs, INPUT.Size);

    }

    static void PauseFunc()
    {
        Console.WriteLine("Paused... Press any key to continue.");
        Console.ReadKey(true);
    }

这是包含所有结构的完整代码:

https://hastebin.com/oregahesoh.cs

我的 keyup 事件做错了吗?

我知道 Thread.Sleep(randTime) 不是问题,因为我尝试了不同的时间(最多一秒)。

【问题讨论】:

    标签: c# input keyboard mouse


    【解决方案1】:

    我已经修好了..

    这是我添加的:

            Input.type = 1;
            Input.U.ki.dwFlags = KEYEVENTF.KEYUP | KEYEVENTF.SCANCODE;
            Inputs[0] = Input;
    

    到 keyup 事件。

    【讨论】:

      猜你喜欢
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多