(C#/C++)Global mouse hook (+dinput)

10/15/2015 08:25 Crack-wtf#1
Hey Leute,

für ein Spiel das über Twitch gespielt wird, brauche ich die möglichkeit meine Maus Ingame zu blocken/invertieren etc.

Jetzt reicht der user32 input hook nicht aus, da ingame Dinput8 genutzt wird.

Nun würde ich euch gerne fragen, wie ich da am klügsten rangehe.
(Bitte beachtet, dass das eigentliche Programm in C# geschrieben ist.)

Meine Idee war folgendes.
Ich schreibe in C++ eine Dll die Dinput8/Dinput9 hookt und über NamedPipes Befehle annimmt.
z.B. "BlockMouse"

Die Dll Injecte ich in jeden Prozess, der die Dinput8.dll/Dinput9.dll geladen hat.
Und im Hauptprozess sende ich eben über den Pipe die befehle.


Kennt ihr eine bessere Lösung?
10/15/2015 11:55 Daifoku#2
Vorweg: Ich kenne Dinput8 nicht

Wenn dinput8 nicht zu komplex ist und die integrität der Datei nicht geprüft wird, könntest du auch eine eigene dinput8 schreiben und diese in den Spieleordner legen.
Das wird zwar meist für directx genutzt, sollte hier aber auch funktionieren.

Als Chart würde das ganze so aussehen:
Spiel <-> dinput8.dll(ProxyDLL) <-> dinput8.dll(SystemDLL)

Der Vorteil daran ist, dass du keine Pipe benötigst.
Der Aufwand ist aber offensichtlich höher.
10/15/2015 12:20 Crack-wtf#3
Doch ich würde dann immernoch Pipes brauchen, weil ich ja festlegen will wann die Maus/Keyboard geblockt werden soll oder nicht.

Ich denke es geht einfach nicht anders.
Ich muss einen Detour in eine Dll packen und es injecten.