feat: switching slides

This commit is contained in:
Gerard Gascón 2024-06-07 00:08:43 +02:00
parent 0ebb7f6459
commit 5f7bb79e56
4 changed files with 45 additions and 2 deletions

View file

@ -29,7 +29,6 @@ public class JoyConRead : GamepadReader {
await LogDeviceInfo(joycon);
joycon.ReportReceived += OnJoyConOnReportReceived;
Console.WriteLine($"JoyCon ready for presenting.");
joycon.StoppedOnError += (_, ex) => {
Console.WriteLine();
@ -39,7 +38,9 @@ public class JoyConRead : GamepadReader {
return Task.CompletedTask;
};
Console.ReadKey();
Console.WriteLine("JoyCon ready for presenting.");
Console.WriteLine("Press Enter to exit program.");
while (Console.ReadKey().Key != ConsoleKey.Enter) { }
joycon.Stop();
Console.WriteLine();

View file

@ -2,7 +2,9 @@
class Program {
private static async Task Main() {
GamepadReader reader = new JoyConRead();
SlideSwitcher switcher = new(reader);
await reader.Read();
switcher.Dispose();
}
}
}

26
SlideSwitcher.cs Normal file
View file

@ -0,0 +1,26 @@
namespace SwitchSlidePresenter;
public class SlideSwitcher : IDisposable {
private readonly GamepadReader _reader;
public SlideSwitcher(GamepadReader reader) {
_reader = reader;
_reader.NextSlide += NextSlide;
_reader.PrevSlide += PreviousSlide;
}
public void Dispose() {
_reader.NextSlide -= NextSlide;
_reader.PrevSlide -= PreviousSlide;
}
private void NextSlide() {
IntPtr handle = Win32Api.GetForegroundWindow();
Win32Api.PostMessage(handle, Win32Api.WM_KEYDOWN, Win32Api.VK_NEXT, 0);
}
private void PreviousSlide() {
IntPtr handle = Win32Api.GetForegroundWindow();
Win32Api.PostMessage(handle, Win32Api.WM_KEYDOWN, Win32Api.VK_PRIOR, 0);
}
}

14
Win32Api.cs Normal file
View file

@ -0,0 +1,14 @@
using System.Runtime.InteropServices;
namespace SwitchSlidePresenter;
public static class Win32Api {
public const UInt32 WM_KEYDOWN = 0x0100;
public const int VK_NEXT = 0x22;
public const int VK_PRIOR = 0x21;
[DllImport("user32.dll")]
public static extern bool PostMessage(IntPtr hWnd, UInt32 Msg, int wParam, int lParam);
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();
}