7

プログラムの開始時に (直接入力を使用して) すべての入力デバイスを列挙する C++ プログラムがあります。プログラムを起動して別のコントローラを接続すると、プログラムを再起動するまでこのコントローラは認識されません。新しいデバイスが接続された後にプログラムがすべてのデバイスを列挙するようにする、使用できるイベントを知っている人はいますか?

4

2 に答える 2

4

この記事では、ゲーム パッドの変更を検出する方法について説明します。まず、メッセージを処理して、またはをWM_DEVICECHANGEチェックできます。ただし、これらを s として受け取るには、最初に呼び出す必要があるようです。wParamDBT_DEVICEARRIVALDBT_DEVICEREMOVECOMPLETEWPARAMRegisterDeviceNotification

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

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 であるため#define、Windows ヘッダーを含める前に適切な OS を追加する必要があることです。

やりたいことによっては、最初にこの関数を呼び出す必要さえない場合もあります。代わりにDBT_DEVNODES_CHANGED、デバイスが接続されているか、接続されていないかを区別しないようにチェックできます。気にしなければ、コードを節約できます。

于 2013-05-13T18:14:28.847 に答える