C# - 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 ответов

Другие вопросы по тегам