[C#] Przesyłanie komunikatów z nieistniejącego urządzenia

Mam problem do przemyślenia.

Szukam rozwiązania do zaimplementowania w C# (ew. może też być Java) przesyłania komunikatów z nieistniejącego urządzenia.

Dla przykładu - nie mam gamepada, ale chciałbym aby system odbierał polecenia tak, jakby był podłączony (wciśnięcia przycisków symulowane przez system).

Zastosowanie global hook’ów pewnie byłoby rozwiązaniem, jednak nie udało mi się znaleźć informacji czy emulowanie wciśnięć można tam zrobić (na pewno można odczytywać z rzeczywistego urządzenia). Nie jestem też pewien czy C# nie udostępnia global hook’ów wyłącznie dla urządzeń typu klawiatura i mysz, ale podejrzewam, że gamepad i tak wywołuje podobne akcje co strzałki itp na klawiaturze, więc możnaby się tego awaryjnie uczepić.

Alternatywą byłoby skorzystanie z DirectInput, ale tu natrafiam na ten sam dylemat co z hook’ami.

Kolejną alternatywą byłoby coś z rejonów WDF lub też stworzenia jakiegoś własnego urządzenia wirtualnego, ale tu nie mam pomysłów.

Co myślicie, DobroProgramiści?


Znalazłem odpowiedź na część awaryjnego planu.

Urządzenia typu gamepad, joystick, myszka są RÓŻNYMI urządzeniami dla systemu Windows i NIE WYSYŁAJĄ tych samych komunikatów(nawet jeśli typ jest ten sam, to dane różne, zależne od typu urządzenia i czasami od samego urządzenia). Tak naprawdę jedynym rozwiązaniem jest stworzenie wirtualnego urządzenia i/lub napisanie i zainstalowanie w systemie odpowiedniego sterownika(słowa-klucze: wspomniane WDF, WDK, HID).