[c#]muisbesturing

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • KillerZero86
  • Registratie: Mei 2010
  • Laatst online: 17-09 10:14
Ik heb voor Kinect muisbesturing ontwikkeld. Dit werkt met de volgende methode:

C#:
1
 System.Windows.Forms.Cursor.Position = new System.Drawing.Point(mousePoint.X + xPlus, mousePoint.Y + yPlus);


In windows windowed software werkt dit prima. Echter, wanneer ik een spel start (al is het maar minecraft) werkt deze methode niet meer. Wat gebruikt een normale muisdriver om de muis aan te sturen, ofwel hoe zorg ik ervoor dat ik de muis kan besturen, ook in games?

Acties:
  • 0 Henk 'm!

  • beany
  • Registratie: Juni 2001
  • Laatst online: 17-09 13:56

beany

Meeheheheheh

In spellen wordt vaak gebruik gemaakt van DirectInput, dit is onderdeel van DirectX. Of er wordt een andere lib gebruikt, maar de standaard Windows manier van muizen wordt niet gebruikt. Het is een andere manier van omgaan met de muis, en ik weet niet of je dat van buitenaf zomaar kan beïnvloeden.

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua


Acties:
  • 0 Henk 'm!

Verwijderd

Dat komt omdat de focus van het window dan af is.

Wat je moet doen is de Handle van de Window ophalen en daar de events heen sturen.

Kijk hier maar eens naar :

http://www.codeproject.com/KB/cs/SendKeys.aspx
http://www.codeproject.com/KB/cs/globalhook.aspx

[ Voor 35% gewijzigd door Verwijderd op 13-01-2012 09:21 ]


Acties:
  • 0 Henk 'm!

  • evolution536
  • Registratie: Maart 2009
  • Laatst online: 05-06-2024

evolution536

besh besh

Verwijderd schreef op vrijdag 13 januari 2012 @ 09:19:
Dat komt omdat de focus van het window dan af is.

Wat je moet doen is de Handle van de Window ophalen en daar de events heen sturen.

Kijk hier maar eens naar :

http://www.codeproject.com/KB/cs/SendKeys.aspx
http://www.codeproject.com/KB/cs/globalhook.aspx
dit zou moeten werken. Een spel gebruikt niet per definitie een andere manier van de muis gebruiken. In sommige gevallen is dit zo, maar niet altijd.

Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 17-09 10:59

Ventieldopje

I'm not your pal, mate!

Het zou moeten kunnen, ook met DirectInput. Misschien niet met C#, maar hoe zouden ze anders aimbots voor spellen schrijven ;)

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • jmzeeman
  • Registratie: April 2007
  • Laatst online: 12-09 16:17
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 mickey8)7) 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 ]

Pagina: 1