当前功能
在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
消息,但我不确定这是否有效。