将密钥发送到游戏-(全屏)-应用程序
Sending Key to Game-(Fullscreen)-Application
我使用以下代码将击键发送到 Windows:
[DllImport("user32.dll", SetLastError = true)]
private static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
public const int KEYEVENTF_EXTENDEDKEY = 0x0001; //Key down flag
public const int KEYEVENTF_KEYUP = 0x0002; //Key up flag
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY, 0);
keybd_event((byte)key, 0, KEYEVENTF_KEYUP, 0);
"key" 可以是任何键码。简单的比如字符或者功能键等等。
这在 "simple" 应用程序中工作正常。例如,如果我打开 NotePad++,我的程序在后台运行,一切正常。
但是当我打开全屏游戏(例如 Pinball FX)时,似乎没有收到击键。
我认为 DirectX 或类似的东西是这里的问题。还有另一种方法可以将密钥发送到那里吗?也许通过 SharpDX?
我设法通过使用 DirectInput 的不同方法解决了这个问题,如下所述:https://www.codeproject.com/questions/279641/c-sharp-directinput-send-key
[DllImport("user32.dll", SetLastError = true)]
private static extern uint SendInput(uint numberOfInputs, INPUT[] inputs, int sizeOfInputStructure);
private static void SendKeyDown(ushort keyCode)
{
var input = new KEYBDINPUT
{
Vk = keyCode
};
SendKeyboardInput(input);
}
private static void SendKeyUp(ushort keyCode)
{
var input = new KEYBDINPUT
{
Vk = keyCode,
Flags = 2
};
SendKeyboardInput(input);
}
private static void SendKeyboardInput(KEYBDINPUT keybInput)
{
INPUT input = new INPUT
{
Type = 1
};
input.Data.Keyboard = keybInput;
if (SendInput(1, new[] { input }, Marshal.SizeOf(typeof(INPUT))) == 0)
{
throw new Exception();
}
}
我使用以下代码将击键发送到 Windows:
[DllImport("user32.dll", SetLastError = true)]
private static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
public const int KEYEVENTF_EXTENDEDKEY = 0x0001; //Key down flag
public const int KEYEVENTF_KEYUP = 0x0002; //Key up flag
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY, 0);
keybd_event((byte)key, 0, KEYEVENTF_KEYUP, 0);
"key" 可以是任何键码。简单的比如字符或者功能键等等。
这在 "simple" 应用程序中工作正常。例如,如果我打开 NotePad++,我的程序在后台运行,一切正常。
但是当我打开全屏游戏(例如 Pinball FX)时,似乎没有收到击键。
我认为 DirectX 或类似的东西是这里的问题。还有另一种方法可以将密钥发送到那里吗?也许通过 SharpDX?
我设法通过使用 DirectInput 的不同方法解决了这个问题,如下所述:https://www.codeproject.com/questions/279641/c-sharp-directinput-send-key
[DllImport("user32.dll", SetLastError = true)]
private static extern uint SendInput(uint numberOfInputs, INPUT[] inputs, int sizeOfInputStructure);
private static void SendKeyDown(ushort keyCode)
{
var input = new KEYBDINPUT
{
Vk = keyCode
};
SendKeyboardInput(input);
}
private static void SendKeyUp(ushort keyCode)
{
var input = new KEYBDINPUT
{
Vk = keyCode,
Flags = 2
};
SendKeyboardInput(input);
}
private static void SendKeyboardInput(KEYBDINPUT keybInput)
{
INPUT input = new INPUT
{
Type = 1
};
input.Data.Keyboard = keybInput;
if (SendInput(1, new[] { input }, Marshal.SizeOf(typeof(INPUT))) == 0)
{
throw new Exception();
}
}