c++ Raw Input

Neue Frage »

Auf diesen Beitrag antworten »
Kitamro Fni c++ Raw Input

Hallo,
ich versuchs einfach mal hier, weil mir die Partnerboards (Physik/Mathe) auch immer gut geholfen haben...

Ermutigt durch die einfache Bedienung einer USB-Experimentier-Platine (inklusive dll) wollte ich mal sehen, ob ich auch den Zustand eines Gamepads/Joysticks mit C++/RawInput einlesen kann. Kurz gesagt: Nein...
Ich nutze Dev-C++ unter Windows.
Beim Druchforsten des Netzes wird oft auf diese Seite verlinkt, mit dem Hinweis dass das doch alles ganz einfach sei..:

msdn.microsoft.com/en-us/library/ms645536%28v=vs.85%29.aspx

Ich würde mir gerne den Zustand meines stinknormalen Gamepads (ohne Treiber) in einer Konsolenanwendung ausgeben lassen. Mit Fensterprogrammen habe ich noch nie gearbeitet.
Was ich bis jetzt hinbekommen habe, ist mir die Anzahl der angeschlossenen HIDs ausgeben zu lassen. ..Zumindes glaube ich das: Mit Gamepad sind es 5, ohne 4, auch wenn ich eigentlich garnicht soviele angeschlossen habe. Egal, ist das Gamepad angeschlossen wird jedenfalls 1 HID mehr angezeigt. (Es sieht so aus, als würden Maus und Tastatur doppelt gezählt (die eig. über PS2 angeschlossen sind).)
Nebenbei gefragt, macht das Sinn!?

So weit so gut.. Jetzt weiß ich leider nicht, was die Leute, die die API programmiert haben, von mir wollen.
Ich orientiere mich einfach mal an dem USB-Experimentier-Board: Dort werden Funktionen mitgeliefert, mit denen man sich den Zustand des Boards ausgeben lassen kann. Jedes Mal wenn die Funktion aufgerufen wird, wird der Zustand eingelesen bzw. im Programm ausgegeben.
Also mache ich das in einer Schleife auch so (samt "Sleep()").
Nennt sich glaube ich "Polling", stimmts?!
Wird das beim Gamepad (bzw. allg. HID) auch so gemacht?
Wie gesagt, ich kann mir nicht zusammenreimen, was von mir verlangt wird, damit ich den Zustand des Gamepads erhalte.
Es muss ja nichtmal eine bestimmte Taste sein, mir würde auch schon eine Bitfolge (oder was weiß ich) genügen, die sich irgendwie ändert, wenn ich eine Taste am Pad drücke.

Gibt es hier zufällig jemanden, der sich damit auskennt, oder der das verlinkte versteht? Und der mir erstmal ein grobes Kochrezept geben kann?
ZB.:
1. Angeschlossene HIDs auflisten
2. Gamepad raussuchen
3. Gamepadzustand "pollen"
--------------------------------------
4. Tasten XY auslesen etc

Naja, so (einfach) wirds nicht sein. Das wäre nur grob die Anleitung für das USB-Experimentier-Board übertragen auf ein Gamepad.
Ich hoffe ja auf den Aha-Effekt, der sich aber seit Tagen nicht eingestellt hat... darum bin ich jetzt hierher gekommen.

GfM
Kitamro Fni
 
Auf diesen Beitrag antworten »
eulerscheZahl

Ich habe so etwas auch noch nie gemacht, aber wie ich das verstanden habe, abbonierst du bei Windows ein Event. Es wird dann bei Eingabe über den Joystick (oder was immer du abboniert hast) eine von dir festgelegte Funktion aufgerufen.

Auf CodeProject habe ich ein Beispielprogramm gefunden (Registrierung erforderlich).
Auf diesen Beitrag antworten »
Kitamro Fni

Hallo,
Danke für die Antwort (besonders weil hier im Ggs zu den anderen Board offenbar nicht soo viel los ist..)!
Ich habe nun endlich auch etwas funtionierenden Code gefunden. Und mal sehen, ob man sich den CodeProject-Code nicht zusammenkopieren kann...

Jedenfalls scheint es an meinem Unwissen über die Windows-Anbindung zu liegen, dass ich nicht weiter komme..
Kennst du zufällig im Netz eine gute (simple/verständliche/kurze) Einführung in den programmiertechnischen Umgang mit Windows?!
Oder kannst du mir vielleicht einfach sagen, wie man den "programmiertechnischen Umgang mit Windows" professionell nennt, dann kann ich auch selbst danach suchen...??

Also vom "Abbonieren eines Events bei Windows" hab ich noch nichts gehört. Aber derartiges meine ich mit "programmiertechnischem Umgang mit Windows".
Kurz gefragt: Geht das Abbonieren auch bei Konsolenanwendungen..?
->
Da die Beispiele immer Fenster erstellen, also keine Konsolenanwendungen sind, frage ich mich, ob Fenster ein Muss sind?! Kann ich den "Raw Input" garnicht für Konsolenanwendungen nutzen?
Bzw. gibt es bei der Konsole keinen oder nicht den gleichen "programmiertechnischen Umgang mit Windows" wie bei Fensteranwendungen, eben weil die Konsole kein Fenster besitzt..??

Jedenfalls wäre ich für jedes Hilfe dankbar, auch für Stichworte wie "Windows Event". Google will ja gefüttert werden..

MfG
Kitamro Fni
Auf diesen Beitrag antworten »
eulerscheZahl

Wie gesagt, ich bin auch dem Gebiet auch nicht so bewandert, habe noch nichtmal mehr ein Windows außerhalb der virtuellen Maschine.

Das hier könnte einen Einstieg bieten: wikipedia.

Sehen wir uns das Codebeispiel mal näher an:
Wie du siehst, gibt es nicht die klassische int main(int argc, char** argv)
Stattdessen wird hier erst ein Fenster erstellt (ich weiß nicht, ob du da das bekannte Consolenfenster hinbekommst und Befehle wie printf verwenden kannst)
wndclassex.lpfnWndProc = &WndProc; abboniert die Ereignisse des Systems (wird giaube ich über ein Flag geprüft, ob sich was getan hat, das über GetMessage gesetzt wird, ohne Gewähr). Hier ist eine Menge dabei, vom Joystick (wenn du den vorher registriert hast) bis zum Ändern der Fenstergröße. Daher am Ende der Funktion return DefWindowProc(hWnd, message, wParam, lParam);, das gibt das ganze ans System weiter, wenn du nicht alles selbst implementieren willst. Die Funktion wird selbstständig aufgerufen, wenn etwas passiert.

in der main hast du dann noch eine Endlosschleife mit for (; ; ), die immer wieder prüft, ob es neue Nachrichten gibt.
 
Auf diesen Beitrag antworten »
Kitamro Fni

Ich wollte mich nur gerade zurück melden..
Wenn man weiß, wonach man suchen muss, findet man ja doch haufenweise Beispiele.
Jetzt gehts ans Eingemachte...
Also besten Dank für die Motivation!
Auf diesen Beitrag antworten »
ed209

Hi,

Ich weiss nicht ob das für Dich eine Option ist. Ich habe zum Ansteuern von Gamepads die SDL Bibliothek benutzt. http://libsdl.org/
SDL beietet eine Abstraktionsschicht über der rohen Windows Ein- und Ausgabe an.
Der Vorteil:
- Weniger Fummelei mit Events
- Dein Code würde theoretisch auch unter Linux laufen, wenn du willst.

ED209
Auf diesen Beitrag antworten »
Kitamro Fni

Hey,
Danke für den Hinweis. Ich bin zwar auch schon drüber gestolpert, aber ich wollte erstemal mit den Grundlagen anfangen. Um so nachvollziehbarer wird dann hoffentlich später soetwas wie SDL.. Ich hätte andernfalls auch immer das Gefühl, dass mir etwas fehlt, auch wenn das noch einen Haufen Arbeit bedeutet...
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »