2013-05-13 15 views
6

私は、プログラムの開始時にすべての入力デバイスを(直接入力を使用して)列挙するC++プログラムを持っています。プログラムが起動し、別のコントローラを接続した場合、このコントローラはプログラムが再起動されるまで認識されません。誰でも私が使用できるイベントを知っているので、新しいものが接続された後に私のプログラムがすべてのデバイスを列挙するようになります。DirectInputを使ってジョイスティックを接続した後に信号を受信する

+0

それはそれを行うように見えます!ありがとう! – Magn3s1um

答えて

2

This articleでは、ゲームパッドの変更を検出する方法について説明しています。まず、WM_DEVICECHANGEメッセージを処理し、DBT_DEVICEARRIVALまたはDBT_DEVICEREMOVECOMPLETEについてwParamをチェックしてください。 WPARAMとして受信するには、RegisterDeviceNotificationを最初に呼び出す必要があります。

次のようにこれを行う方法の記事の例は次のとおりです。

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 
} 

このため最小サポートOSがXPであるということであるため、あなたが適切に配置する必要があるので、注意すべき唯一の他の事Windowsヘッダーを含める前には#defineです。

あなたがやりたいことに応じて、この関数を最初に呼び出す必要はないかもしれません。代わりに、DBT_DEVNODES_CHANGEDをチェックするだけで、接続されているデバイスと接続されていないデバイスを区別することができます。あなたが気にしないなら、それはいくつかのコードを保存することができます。

関連する問題