2013-05-13 10 views
6

Ich habe ein C++ - Programm, das alle Eingabegeräte (mit direkter Eingabe) am Anfang des Programms auflistet. Wenn das Programm gestartet wird und ich dann einen anderen Controller anschließe, wird dieser Controller erst beim Neustart des Programms erkannt. Wer weiß von einem Ereignis, das ich verwenden kann, dass mein Programm alle Geräte aufzählt, nachdem ein neues eingesteckt ist?DirectInput verwenden, um Signal nach dem Einstecken des Joysticks zu empfangen

+0

Das sieht aus wie es wird es tun! Vielen Dank! – Magn3s1um

Antwort

2

This article beschreibt, wie Game-Pad Änderungen zu erkennen. Zuallererst können Sie die Nachricht WM_DEVICECHANGE behandeln und wParam für oder DBT_DEVICEREMOVECOMPLETE überprüfen. Es scheint, dass, um diese als WPARAM s zu erhalten, müssen Sie zuerst RegisterDeviceNotification aufrufen.

das Beispiel des Artikels, wie dies zu tun ist, wie folgt:

DEV_BROADCAST_DEVICEINTERFACE notificationFilter; 
ZeroMemory(&notificationFilter, sizeof(notificationFilter)); 

notificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; 
notificationFilter.dbcc_size = sizeof(notificationFilter); 

HDEVNOTIFY hDevNotify; 
hDevNotify = RegisterDeviceNotification(m_hWnd, &notificationFilter, 
    DEVICE_NOTIFY_WINDOW_HANDLE | 
    DEVICE_NOTIFY_ALL_INTERFACE_CLASSES); 

if(hDevNotify == NULL) { 
    // do some error handling 
} 

Die einzige andere Sache zu achten ist, dass das minimal unterstützte Betriebssystem für diese XP, so dass Sie in den entsprechenden setzen müssen #define dafür, bevor Sie die Windows-Header.

Je nachdem, was Sie tun möchten, müssen Sie diese Funktion möglicherweise nicht einmal aufrufen. Stattdessen können Sie einfach DBT_DEVNODES_CHANGED überprüfen, um nicht zu unterscheiden, ob ein Gerät angeschlossen oder nicht angeschlossen ist. Das könnte etwas Code sparen, wenn es dir egal ist.