C# - SendInput() - 按住键?

时间:2015-06-10 10:01:59

标签: c# keyboard keydown sendinput

当前功能
在Direct3D环境中,按键被按下。在非Direct3D环境中,只需按一次。

    public static void HoldKey()
    {
        //Type = 1 means keyboard input.
        INPUT IP = new INPUT { Type = 1 };
        IP.Data.Keyboard = new KEYBDINPUT();
        IP.Data.Keyboard.VirtualCode = 0;  //Zero for ignore virtual code.
        IP.Data.Keyboard.ScanCode = 0x39; // Spacebar scancode.
        IP.Data.Keyboard.Flags = 0x0008; //KEYEVENTF_SCANCODE
        IP.Data.Keyboard.Time = 0;
        IP.Data.Keyboard.ExtraInfo = IntPtr.Zero;

        INPUT[] Inputs = new INPUT[] { IP };
        //Key Press.
        SendInput(1, Inputs, Marshal.SizeOf(typeof(INPUT)));
    }

应该注意,我使用ScanCode字段而不是VirtualCode字段,因为我确实希望向Direct3D应用程序发送输入。

期望的功能
我希望在Direct3D环境和非Direct3D环境中按下键,类似于按住物理键盘上的相应按钮。

其他信息
我见过一些使用keybd_event()函数的代码,虽然它在MSDN网站上说它已经被取代了。

我已考虑使用SendMessage()功能发送WM_KEYDOWN消息,但我不确定这是否有效。

0 个答案:

没有答案