65 lines
No EOL
1.4 KiB
C#
65 lines
No EOL
1.4 KiB
C#
using System.Runtime.InteropServices;
|
|
using Win32Api;
|
|
|
|
namespace SwitchSlidePresenter;
|
|
|
|
public class SlideSwitcher : IDisposable {
|
|
private readonly IGamepadReader? _reader;
|
|
|
|
private const uint INPUT_KEYBOARD = 1;
|
|
private const ushort VK_NEXT = 0x22;
|
|
private const ushort VK_PRIOR = 0x21;
|
|
private const uint KEYEVENTF_KEYDOWN = 0x0000;
|
|
private const uint KEYEVENTF_KEYUP = 0x0002;
|
|
|
|
public SlideSwitcher(IGamepadReader? reader) {
|
|
_reader = reader;
|
|
_reader.NextSlide += NextSlide;
|
|
_reader.PrevSlide += PreviousSlide;
|
|
}
|
|
|
|
public void Dispose() {
|
|
_reader.NextSlide -= NextSlide;
|
|
_reader.PrevSlide -= PreviousSlide;
|
|
}
|
|
|
|
private static void NextSlide() {
|
|
SimulateKeyPress(VK_NEXT);
|
|
}
|
|
|
|
private static void PreviousSlide() {
|
|
SimulateKeyPress(VK_PRIOR);
|
|
}
|
|
|
|
private static void SimulateKeyPress(ushort keyCode) {
|
|
Input[] inputs = new Input[2];
|
|
|
|
inputs[0] = new Input {
|
|
type = INPUT_KEYBOARD,
|
|
u = new InputUnion {
|
|
ki = new KeyboardInput {
|
|
wVk = keyCode,
|
|
wScan = 0,
|
|
dwFlags = KEYEVENTF_KEYDOWN,
|
|
time = 0,
|
|
dwExtraInfo = IntPtr.Zero
|
|
}
|
|
}
|
|
};
|
|
|
|
inputs[1] = new Input {
|
|
type = INPUT_KEYBOARD,
|
|
u = new InputUnion {
|
|
ki = new KeyboardInput {
|
|
wVk = keyCode,
|
|
wScan = 0,
|
|
dwFlags = KEYEVENTF_KEYUP,
|
|
time = 0,
|
|
dwExtraInfo = IntPtr.Zero
|
|
}
|
|
}
|
|
};
|
|
|
|
Win32Api.Win32Api.SendInput((uint)inputs.Length, inputs, Marshal.SizeOf(typeof(Input)));
|
|
}
|
|
} |