ユーザーが差し込んだばかりの USB 大容量記憶装置のデバイス インスタンス ID (一意の ID) をプログラムで取得する方法は?
3746 次
2 に答える
2
デバイス変更通知を登録して、任意のウィンドウ ハンドルから WM_DEVICECHANGE をキャッチします。そのような:
DEV_BROADCAST_DEVICEINTERFACE dbd = { sizeof(dbd) };
dbd.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
dbd.dbcc_classguid = GUID_DEVINTERFACE_USB_DEVICE;
RegisterDeviceNotification(hwnd, &dbd, DEVICE_NOTIFY_WINDOW_HANDLE);
WM_DEVICECHANGE の lParam は、DBT_DEVTYP_DEVICEINTERFACE にキャストできます。注 - デバイスを接続すると、複数の WM_DEVICECHANGE 通知を受け取る場合があります。到着イベントをフィルターして、重複を無視するだけです。
LRESULT WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(hwnd)
{
case WM_DEVICE_CHANGE:
{
PDEV_BROADCAST_HDR pHdr = NULL;
PDEV_BROADCAST_DEVICEINTERFACE pDev = NULL;
pHdr = (PDEV_BROADCAST_HDR)lParam;
bool fDeviceArrival = (wParam == DBT_DEVICEARRIVAL);
if (fDeviceArrival)
{
if (pHdr && (pHdr->dbch_devicetype==DBT_DEVTYP_DEVICEINTERFACE))
{
pDev = (PDEV_BROADCAST_DEVICEINTERFACE)lParam;
}
if (pDev && (pDev->dbcc_classguid == GUID_DEVINTERFACE_USB_DEVICE))
{
// the PNP string of the device just plugged is in dbcc_name
OutputDebugString(pDev->dbcc_name);
OutputDebugString("\r\n");
}
}
....
于 2010-06-17T01:30:27.673 に答える
1
WMIでできると思います。クラスを調べWin32_LogicalDiskToPartition
てすべてのディスク名のリストを取得し、それらの名前を使用してクラスWin32_DiskDrive
とそのPNPDeviceID
プロパティを照会します。
実際、より良い手順とそれを行う素晴らしいクラスについては、ここを参照してください。
于 2010-06-16T07:43:09.480 に答える