我想在我的機器中列出USB驅動器。 如何在VC++中做到這一點。你能舉出一個示例代碼嗎?列出VC++中的USB驅動器號
1
A
回答
0
我不認爲你會得到任何人爲你寫代碼:你是一個程序員,這可能是你的工作。
但是,您可以從GetLogicalDriveStrings和GetDriveType開始。
3
根據GetDriveType的文檔,它說我們應該用SetupDiGetDeviceRegistryProperty的,我引用:
確定驅動器是否爲USB型驅動器,調用SetupDiGetDeviceRegistryProperty並指定SPDRP_REMOVAL_POLICY屬性。
我跑了一些測試,找不到某個設備是USB驅動器的任何跡象。 對於許多設備(以及我的USB驅動器),SPDRP_REMOVAL_POLICY返回2,所以我無法真正使用它。使用SPDRP_CAPABILITIES調用SetupDiGetDeviceRegistryProperty並僅過濾CM_DEVCAP_REMOVABLE也提供了許多設備(即使與刪除策略結合時也沒有給出任何指示如何找到我的USB驅動器 此外,使用SPDRP_DEVTYPE調用SetupDiGetDeviceRegistryProperty始終返回錯誤13(「數據爲。無效「),我不知道爲什麼
下面是一些代碼:
void SetupDiInformation() { HDEVINFO hDevInfo = SetupDiGetClassDevsW(NULL, NULL, NULL, DIGCF_PRESENT | DIGCF_ALLCLASSES); if (INVALID_HANDLE_VALUE == hDevInfo) { fwprintf(stderr, L"Error SetupDiCreateDeviceInfoList: %d\n", GetLastError()); return; } SP_DEVINFO_DATA devInfoData; devInfoData.cbSize = sizeof(devInfoData); BOOL success; success = SetupDiEnumDeviceInfo(hDevInfo, 0, &devInfoData); for (int i=1; success; i++) { DWORD regDataType = REG_NONE, reqSize = 0; WCHAR deviceDesc[MAX_PATH+1] = {0}; DWORD deviceType = -1, capabilities = -1; DWORD removalPolicy = CM_REMOVAL_POLICY_EXPECT_NO_REMOVAL; BOOL regPropSuccess = false; /* regDataType = REG_NONE; reqSize = 0; regPropSuccess = SetupDiGetDeviceRegistryProperty(hDevInfo, &devInfoData, SPDRP_DEVTYPE, ®DataType, (PBYTE)&deviceType, sizeof(deviceType), &reqSize); if (!regPropSuccess) { fwprintf(stderr, L"Error SetupDiGetDeviceRegistryProperty(SPDRP_DEVTYPE)[%d]: %d\n", i, GetLastError()); } */ regPropSuccess = SetupDiGetDeviceRegistryProperty(hDevInfo, &devInfoData, SPDRP_DEVICEDESC, ®DataType, (PBYTE)deviceDesc, sizeof(deviceDesc), &reqSize); if (!regPropSuccess) { fwprintf(stderr, L"Error SetupDiGetDeviceRegistryProperty(SPDRP_DEVICEDESC)[%d]: %d\n", i, GetLastError()); } regDataType = REG_NONE; reqSize = 0; regPropSuccess = SetupDiGetDeviceRegistryProperty(hDevInfo, &devInfoData, SPDRP_CAPABILITIES, ®DataType, (PBYTE)&capabilities, sizeof(capabilities), &reqSize); if (!regPropSuccess) { fwprintf(stderr, L"Error SetupDiGetDeviceRegistryProperty(SPDRP_CAPABILITIES)[%d]: %d\n", i, GetLastError()); } regDataType = REG_NONE; reqSize = 0; regPropSuccess = SetupDiGetDeviceRegistryProperty(hDevInfo, &devInfoData, SPDRP_REMOVAL_POLICY, ®DataType, (PBYTE)&removalPolicy, sizeof(removalPolicy), &reqSize); if (!regPropSuccess) { fwprintf(stderr, L"Error SetupDiGetDeviceRegistryProperty(SPDRP_REMOVAL_POLICY)[%d]: %d\n", i, GetLastError()); } if ((CM_DEVCAP_REMOVABLE & capabilities) != 0) { wprintf(L"% 4d. ", i); wprintf(L"%X-%04X-%X-", devInfoData.ClassGuid.Data1, devInfoData.ClassGuid.Data2, devInfoData.ClassGuid.Data3); int data4len = sizeof(devInfoData.ClassGuid.Data4)/sizeof(devInfoData.ClassGuid.Data4[0]); for (int j=0; j 30) deviceDesc[30]=L'\0'; //wprintf(L" %-8d%-30s 0x%08X %d [%d] ", devInfoData.DevInst, deviceDesc, deviceType, removalPolicy, capabilities); wprintf(L" %-8d%-30s %d [%d] ", devInfoData.DevInst, deviceDesc, removalPolicy, capabilities); //DisplayCapabilities(capabilities); wprintf(L"\n"); } success = SetupDiEnumDeviceInfo(hDevInfo, i, &devInfoData); } DWORD lastError = GetLastError(); if (lastError != ERROR_NO_MORE_ITEMS) { // error occurred fwprintf(stderr, L"Error SetupDiEnumDeviceInfo: %d\n", lastError); } if (!SetupDiDestroyDeviceInfoList(hDevInfo)) { fwprintf(stderr, L"Error SetupDiDestroyDeviceInfoList: %d\n", GetLastError()); return; } }
相關問題
- 1. 寫出USB驅動器
- 2. Python檢測USB驅動器,然後分配驅動器號?
- 3. 智能卡USB驅動器號
- 4. 列出Linux中的所有USB驅動器
- 5. 查找沒有WMI的USB驅動器的序列號
- 6. 如何使用Powershell查找新插入的USB驅動器的驅動器號?
- 7. Android USB OTG讀取USB驅動器
- 8. 如何檢測USB閃存驅動器的盤符USB閃存驅動器的
- 9. 如何在c#中新插入USB驅動器號?
- 10. 在java中保護USB驅動器
- 11. 在Windows上區分USB閃存驅動器和USB硬盤驅動器
- 12. USB棒上的Power Shell腳本:如何確定USB驅動器號?
- 13. 如何獲取USB閃存驅動器的製造商序列號?
- 14. 如何獲得OS X上USB驅動器的硬盤序列號?
- 15. USB驅動器和Windows驅動器限制
- 16. 用於USB筆驅動器的模塊
- 17. MediaStore.Audio.Media.DATA爲空的USB驅動器文件
- 18. 來自c的USB筆驅動器identifer#
- 19. 使用.NET編程的USB驅動器
- 20. USB驅動器上的Laravel Homestead
- 21. 來自USB驅動器的Clojure REPL
- 22. 有沒有辦法在dired中列出驅動器號?
- 23. 批處理文件和可變USB驅動器號
- 24. Linux內核中的USB設備和HDD設備的驅動器號
- 25. 用PC模擬USB閃存驅動器
- 26. 從'計算機'訪問USB驅動器
- 27. 從USB閃存驅動器運行Tomcat
- 28. 從USB驅動器運行程序
- 29. 從USB拇指驅動器運行glassfish
- 30. 將USB驅動器格式化爲CDFS