Ik zou
SendInput uit de Windows API gebruiken met
MOUSEINPUT structures dit is in windows op dit moment de aangeraden manier om input te genereren. Ik gebruik het zelf voor een custom UI Testing framework bij een klant en heb nog niet meegemaakt dat deze input niet correct verwerkt wordt door een doel applicatie. Omdat dit geen standaard .NET spul is moet je deze functies aanroepen via de methodes zoals uitgeled op
pinvoke.net. Voor spellen zou ik ook niet werken met absolute coordinaten maar met relatieve coordinaten in
mickeys (
ja serieus de eenheid voor relatieve muis beweging is de mickey
) dat zit dichter bij wat er van een muis afkomt.
Edit:
Bedacht me net nog dat er nog een (waarschijnlijk verschrikkelijke overkill) methode is die voor usermode software op geen enkele manier van echt te onderscheiden is en dat is door gebruik te maken van het
Device Simulation Framework in de DDK. Dit is een framework voor driver ontwikkelaars dat helpt bij het maken van een driver als de daadwerkelijke hardware nog niet beschikbaar is volgens mij zit er zelfs al een sample voor de muis bij.
[...]Wat gebruikt een normale muisdriver om de muis aan te sturen[...]
Om nog even je originele vraag te beantwoorden, de niet-usb muis driver stack werkt ongeveer zo (Het is voor USB wat verandert maar ik neem aan dat het idee het zelfde blijft):
1: De muis stuurt data via allerlei hardware over een bus naar een bus driver (serieel/ps2)
2: De bus driver stuurt deze data naar filter en function drivers deze zorgen er voor dat de data wordt omgezet naar MOUSE_INPUT_DATA structures
3: De muis driver ontvangt de muis data. Deze data onthoud ie als een lijst van MOUSE_INPUT_DATA structures (die qua inhoud erg lijken op het MOUSEINPUT structure)
3: Op bepaalde intervals stuurt het Win32 subsystem een I/O Request Packet naar de muis driver met de vraag om de gequeuede data te sturen.
4: De muis driver reageert hierop door de gequeuede MOUSE_INPUT_DATA structures naar het Win32 subsystem te sturen.
De code van de volgende twee drivers waar al deze stappen in staan zit als samples in de ddk, met een beetje zoeken is de code hiervan ook op google wel te vinden:
i8042prt.sys: Dit is een bus en function driver voor ps2
mouclass.sys: De standaard muis driver voor alle plug and play muizen (USB heeft een aparte driver stack)
[
Voor 54% gewijzigd door
jmzeeman op 14-01-2012 00:02
]