Copy-paste examples for common tasks. For full context and disposal rules see Full usage guide.
using GameInputSharp.Abstractions;
using GameInputSharp.Devices;
using var manager = new GameInputManager();
foreach (var device in manager.GetDevices())
{
Console.WriteLine($"{device.DisplayName} — {device.DeviceId}");
if (device is GamepadDevice) Console.WriteLine(" Type: Gamepad");
else if (device is KeyboardDevice) Console.WriteLine(" Type: Keyboard");
else if (device is MouseDevice) Console.WriteLine(" Type: Mouse");
}var gamepad = manager.GetDevices().OfType<GamepadDevice>().FirstOrDefault();
if (gamepad == null) return;
GamepadState? state = manager.GetCurrentGamepadState(gamepad);
if (state == null) return;
float leftTrigger = state.Value.LeftTrigger;
float rightTrigger = state.Value.RightTrigger;
float leftX = state.Value.LeftThumbstickX;
float leftY = state.Value.LeftThumbstickY;
uint buttons = state.Value.Buttons;
bool aPressed = (buttons & (uint)GameInputGamepadButtons.A) != 0;
bool bPressed = (buttons & (uint)GameInputGamepadButtons.B) != 0;var mouse = manager.GetDevices().OfType<MouseDevice>().FirstOrDefault();
MouseState? mouseState = mouse != null ? manager.GetCurrentMouseState(mouse) : null;
var keyboard = manager.GetDevices().OfType<KeyboardDevice>().FirstOrDefault();
KeyState[] keys = keyboard != null ? manager.GetCurrentKeyboardState(keyboard, maxKeys: 32) : Array.Empty<KeyState>();gamepad.Haptics.SetVibration(0.5f, 0.5f); // left, right 0–1
gamepad.Haptics.SetVibration(0f, 0f); // stopmanager.DeviceCallback += (sender, args) =>
{
bool connected = (args.CurrentStatus & GameInputDeviceStatus.Connected) != 0;
Console.WriteLine($"Device {args.DeviceId}: {(connected ? "Connected" : "Disconnected")}");
};
// In game loop:
manager.DispatchCallbacks(1000);manager.ReadingCallback += (sender, args) =>
{
using (args.Reading)
{
GamepadState? state = manager.GetGamepadStateFromReading(args.Reading);
if (state.HasValue)
; // use state.Value
}
};
manager.RegisterReadingCallback(gamepad, GameInputKinds.Gamepad);
// In game loop: manager.DispatchCallbacks(1000);var (initOk, rawCount) = manager.GetDiagnostics();
if (!initOk)
{
var (mainWin32, mainEx) = manager.GetMainPathLoadFailure();
var (path1, path2, exists1, exists2, is64) = manager.GetLoadPaths();
Console.WriteLine($"DLL paths: {path1} (exists: {exists1}), {path2} (exists: {exists2})");
if (mainWin32 != 0) Console.WriteLine($"Win32: {mainWin32}");
}using var manager = new GameInputManager(logger, loadOnlyFromSystem32: true);
// If DLL not in System32, GetDevices() returns empty listbool found = manager.TryGetDeviceByDeviceId(deviceIdString, out var device);
if (found && device != null)
{
try { /* use device */ }
finally { device.Dispose(); }
}using var effect = gamepad.CreateForceFeedbackEffect(
motorIndex: 0,
durationMicroseconds: 500_000,
intensity: 0.8f);
if (effect != null)
{
effect.Start();
effect.SetGain(0.5f);
effect.Stop();
}using (var manager = new GameInputManager())
{
var devices = manager.GetDevices();
// use devices; manager and native refs released on exit
}
// Do NOT call Dispose or UnregisterCallback from inside a callback