1
나는 3 개의 "return key"를 directx 응용 프로그램에 보내는 작은 응용 프로그램을 작성하고 있습니다. 하지만 난 directx 응용 프로그램에서만 첫 번째 "반환 키"작업 .. 메모장에서 테스트했기 때문에 오류가 발생했습니다. 나는 이유가 뭔지 몰라.C# directx 응용 프로그램에 키 스트로크 보내기
도와주세요. 고마워요! :)
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)));
}
이 솔루션을 시도했지만 문제가 무엇인지 알았습니다 ... 한 번 사용한 키를 보낼 수 없습니다 ... – drk88
당신은 할 수 있어야하지만 다른 메시지를 보내야 KeyUp도 시뮬레이션 할 수 있습니다. 키 누름. –