refactor: extract input sender to an interface for multiple platform support
This commit is contained in:
parent
184f78123a
commit
1e6f8c0b9f
4 changed files with 61 additions and 47 deletions
47
SlidePresenter/InputSender/WindowsInputSender.cs
Normal file
47
SlidePresenter/InputSender/WindowsInputSender.cs
Normal file
|
@ -0,0 +1,47 @@
|
|||
using System.Runtime.InteropServices;
|
||||
using Win32Api;
|
||||
|
||||
namespace SwitchSlidePresenter.InputSender;
|
||||
|
||||
public class WindowsInputSender : IInputSender {
|
||||
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 void NextSlide() => SimulateKeyPress(VK_NEXT);
|
||||
public 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)));
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue