C# c向directx应用程序发送按键
我正在开发一个小应用程序,它向directx应用程序发送3个返回键。但我有一个错误,因为在directx应用程序中,只有第一个返回键起作用。我在记事本中进行了测试,结果很好。我不知道为什么 请帮帮我。非常感谢C# c向directx应用程序发送按键,c#,C#,我正在开发一个小应用程序,它向directx应用程序发送3个返回键。但我有一个错误,因为在directx应用程序中,只有第一个返回键起作用。我在记事本中进行了测试,结果很好。我不知道为什么 请帮帮我。非常感谢 private int Itournament; private int FLAG = 0x0008; [DllImport("user32.dll")] static extern UInt32 SendInput(UIn
private int Itournament;
private int FLAG = 0x0008;
[DllImport("user32.dll")]
static extern UInt32 SendInput(UInt32 nInputs, [MarshalAs(UnmanagedType.LPArray, SizeConst = 1)] INPUT[] pInputs, Int32 cbSize);
[StructLayout(LayoutKind.Explicit)]
struct INPUT
{
[FieldOffset(0)]
public int type;
[FieldOffset(4)]
public MOUSEINPUT mi;
[FieldOffset(4)]
public KEYBDINPUT ki;
[FieldOffset(4)]
public HARDWAREINPUT hi;
}
[StructLayout(LayoutKind.Sequential)]
struct MOUSEINPUT
{
public int dx;
public int dy;
public int mouseData;
public int dwFlags;
public int time;
public IntPtr dwExtraInfo;
}
[StructLayout(LayoutKind.Sequential)]
struct KEYBDINPUT
{
public short wVk;
public short wScan;
public int dwFlags;
public int time;
public IntPtr dwExtraInfo;
}
[StructLayout(LayoutKind.Sequential)]
struct HARDWAREINPUT
{
public int uMsg;
public short wParamL;
public short wParamH;
}
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Itournament = Convert.ToInt32(textBox1.Text);
panel1.Enabled = false;
button2.Enabled = true;
Droid(Itournament);
}
private void button2_Click(object sender, EventArgs e)
{
Application.Restart();
}
private void Droid(int Itournament_)
{
Thread.Sleep(5000);
Send_Key(0x1C);
Thread.Sleep(5000);
Send_Key(0x1C);
/*do
{
Send_Key(0x14);
Itournament_--;
}
while (Itournament_ != 0);*/
}
private void Send_Key(short Keycode)
{
INPUT[] InputData = new INPUT[1];
InputData[0].type = 1;
InputData[0].ki.wScan = Keycode;
InputData[0].ki.dwFlags = FLAG;
InputData[0].ki.time = 0;
InputData[0].ki.dwExtraInfo = IntPtr.Zero;
SendInput(1, InputData, Marshal.SizeOf(typeof(INPUT)));
}
该标志设置为扫描代码。其他一切看起来都是正确的。这是我的枚举
[Flags]
public enum KeyFlag
{
KeyDown = 0x0000,
ExtendedKey = 0x0001,
KeyUp = 0x0002,
UniCode = 0x0004,
ScanCode = 0x0008
}
尝试发送带有扫描码作为标志值的向下键0x0000
例如:KeyFlag.KeyDown | KeyFlag.ScanCode
记得使用KeyFlag.KeyUp | KeyFlag.ScanCode发送另一个SendInput以模拟按键并释放向下键。我尝试了此解决方案,但发现了问题所在…我无法发送我曾经使用过的按键…您应该能够发送,但您还必须发送另一条消息KeyUp以模拟按键。