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
сообщение, но я не уверен, что это сработает.