C#의 SendInput API로 게임에 일부 키를 보내려고합니다. SendInput API로 일부 키를 보내고 싶습니다.
[DllImport("user32.dll")]
static extern int SendInput(int nInputs, INPUT[] pInputs, int cbSize);
[StructLayout(LayoutKind.Sequential)]
private struct MOUSEINPUT
{
public int dx;
public int dy;
public uint mouseData;
public uint dwFlags;
public uint time;
public IntPtr dwExtraInfo;
}
[StructLayout(LayoutKind.Sequential)]
private struct KEYBDINPUT
{
public short wVk;
public short wScan;
public int dwFlags;
public int time;
public IntPtr dwExtraInfo;
}
[StructLayout(LayoutKind.Sequential)]
private struct HARDWAREINPUT
{
public uint uMsg;
public ushort wParamL;
public ushort wParamH;
}
[StructLayout(LayoutKind.Explicit)]
private struct INPUT
{
[FieldOffset(0)]
public uint type;
[FieldOffset(4)]
public MOUSEINPUT mi;
[FieldOffset(4)]
public KEYBDINPUT ki;
[FieldOffset(4)]
public HARDWAREINPUT hi;
}
public static void WalkFront()
{
INPUT[] inputs = new INPUT[1];
Keys virtualKeycode = (Keys)0x15;
inputs[0].type = INPUT_KEYBOARD;
inputs[0].ki.wVk = (short)virtualKeycode;
inputs[0].ki.wScan = (short)MapVirtualKey((int)virtualKeycode, 0);
inputs[0].ki.dwFlags = KEYEVENTF_SCANCODE;
inputs[0].ki.time = 0;
inputs[0].ki.dwExtraInfo = GetMessageExtraInfo();
SendInput(1, inputs, Marshal.SizeOf(inputs[0]));
}
를 제대로 작동하지 않습니다 그러나 다음과 같이
내가 몇 가지 코드를 썼다 (내 환경은 윈도우 7 64 비트입니다).분명히이 코드는 백 스페이스을 게임에 보낼 수 있습니다. 사실,이 코드는 Notepad.exe에서 문자를 삭제할 수 있습니다.
기이하게도이 코드는 백 스페이스 만 응용 프로그램에 보냅니다. 나는이 코드에서 keycode (나는 0x14, 0x13, 0x12 등을 시도했다.)를 변경했다. 그러나이 코드는 백 스페이스 만 보냅니다.
다른 키 (J, K, L ... 등)를 응용 프로그램에 보내고 싶지만 할 수 없습니다.
조언이 있으십니까? 감사합니다.
'SendInput' 호출을하기 전에'inputs [0] .ki.wScan'의 값은 무엇입니까? 'MapVirtualKey' 함수가 성공 했습니까, 아니면 0을 리턴합니까? –
가상 키와 스캔 코드가 혼합되어 있습니다. 가상 키 0x15는 일본어 키보드에서만 사용할 수 있습니다. 그러나 0x15는 백 스페이스 키의 스캔 코드입니다. .NET SendKeys 클래스 사용을 고려하십시오. –
조언 해 주셔서 감사합니다. 그러나 .NET SendKeys 클래스를 사용하려고하면 키를 게임에 보낼 수 없습니다. 확률, 게임 DirectInput 그래서 SendInputs 같은 낮은 수준의 API를 사용해야한다고 생각합니다. – user1145477