\\ Home : Articoli : Stampa
DirectInput - Enumerazione
Di RobyDx (del 09/08/2007 @ 11:20:25, in DirectX9, linkato 2490 volte)

Se realizzerete dei giochi da distribuire al publico incontrerete subito un problema di compatibilità nel settore del controllo. Se tutti infatti possiedono una tastiera più o meno uguale a quelle degli altri, questo non vale per i mouse e soprattutto non vale per i vari joystick, gamepad e volanti. Quanti pulsanti ha il joypad? Il mouse ha la rotellina? La leva è analogica? Tutti fattori che se non considerati potrebbero rendere i vostri giochi letteralmente incontrollabili. Risulta quindi molto importante conoscere a priori il tipo di controllo che si ha a disposizione in modo da gestire al meglio eventuali situazioni. Sapere quali sono le periferiche collegate al PC è molto semplice. Ecco come fare.

Enumerazione globale

Per prima cosa chiederemo al PC quante periferiche sono collegate ed una loro descrizione superficiale. Utilizzeremo la classe Manager di DirectInput.
Manager.Devices.Count : questo valore restituisce il numero di periferiche collegate al PC. Devices è una collezione che possiamo leggere con un semplice ciclo.

Dim DIDevice As DeviceInstance
For Each DIDevice In Manager.GetDevices(DeviceClass.All, EnumDevicesFlags.AttachedOnly)
Lettura
Next

Tramite l'oggetto DIDevice scorriamo la lista generata da getDevices. Nella zona lettura possiamo utilizzare DIDevice per leggere le caratteristiche marginali della periferica.
GetDevices permette di impostare la lista a seconda delle necessità (notare che l'abbiamo già usata per creare il joystick). Usate deviceclass per scegliere il tipo di periferiche che interessano.

Keyboard: si selezionano solo le tastiere
GameControl: tutti i joystick
Pointer: Mouse e puntatori
Other: altri tipi di periferiche
All: tutte le periferiche

Altra opzione utile è EnumDevicesFlags

IncludeHidden: nascoste
IncludePhantoms: periferiche non collegate al momento (non include quelle USB)
IncludeAliases: duplicate
ForceFeeback: quelle con ForceFeedback (vibrazione)
AttachedOnly: solo quelle collegate
AllDevices: tutte le periferiche

Ora con DIDevice leggete le prime informazioni.

DeviceSubType: numero di versione che specifica il tipo esatto di periferica
DeviceType: tipo
FFDriverGuid: identificatore del driver del force feedback
InstanceGuid: guida, il numero per creare la periferica
InstanceName: nome della periferica
ProductGuid: guida che identifica il prodotto
ProductName: nome prodotto
Usage: valore HID
UsagePage: codice pagina di HID

Per sapere le caratteristiche dovrete creare dei device con le istanceGuid

Dim d As New Device(enumeraC.InstanceGuid)

Ora usate d.Caps per sapere tutte le caratteristiche. Notare che le proprietà sono le stesse per ogni periferica quindi ad esempio il numero di assi sono le direzioni del controller del joystick ma anche quelle in cui il mouse può muoversi e così via. Ecco i principali (sono inclusi anche valori della precedente enumerazione).

FFDriverVersion: versione driver
FirmwareRevision: revisione driver ForceFeedback
HardwareRevision: revisione hardware
Hidden: nascosto
NumberAxes: numero di assi. Se il mouse ne mostra 3 significa che possiede una rotellina.
NumberButtons: numero pulsanti
NumberPointOfViews: numero di point of view (alcuni tipi di joypad)
Saturation: saturazione

C'è ne sono altri raramente usati. Li potete trovare nella SDK.

Non c'è altro da sapere. Ecco gli esempi:

Esempio VB.Net

Esempio C#