Название: [windows] список USB накопителей Отправлено: Alex Custov от Августа 26, 2009, 16:03 Под виндз не писал уже несколько лет :) Как можно определить список подключенных USB накопителей, и информацию о них? В Qt форме необходимо вывести их буквы и метки (vendor+model если метки нет). Как это можно замутить? Кроссплатформенность неважна, программа будет только для виндз.
Название: Re: [windows] список USB накопителей Отправлено: crackedmind от Августа 26, 2009, 16:16 Почитай вот тут: http://msdn.microsoft.com/en-us/library/aa365730(VS.85).aspx
Название: Re: [windows] список USB накопителей Отправлено: Alex Custov от Августа 26, 2009, 16:17 Почитай вот тут: http://msdn.microsoft.com/en-us/library/aa365730(VS.85).aspx угу, что-то похожее на правду. Спасибо. Доп. А как узнать более подробную информацию об устройстве - vendor, model, bus и т.д.? Наподобие как в Linux через HAL. Название: Re: [windows] список USB накопителей Отправлено: crackedmind от Августа 26, 2009, 18:35 Тут похоже надо копать в сторону Win DDK, средствами SDK это не решить.
p.s. нашел программку, которая выводит различную инфу про разделы. http://www.winsim.com/diskid32/ Сорцы прилагаются. Название: Re: [windows] список USB накопителей Отправлено: zenden от Августа 26, 2009, 19:04 можешь посмотреть исходники unetbootin (http://unetbootin.sourceforge.net/)
Написана на Qt4, каким-то образом получает список USB накопителей и винде, и в линуксе. Название: Re: [windows] список USB накопителей Отправлено: Alex Custov от Августа 26, 2009, 19:33 спасибо, буду разбираться
Название: Re: [windows] список USB накопителей Отправлено: Alex Custov от Августа 26, 2009, 22:27 вобщем изыскания такие - unetbootin использует самый простой способ - берёт список дисков и отсеивает из них не-removable, это я уже и сам сделал :)
diskid32 делает всё через DDK, через DeviceIoControl. Проблема в том, что она показывает инфу только о жёстких дисках, а об USB флешках - нет (флешка вставлена). Глядя на код вижу, что там перебираются устройства по маске "\\\\.\\Scsi%d:" от 0 до 16. Может, USB накопители по другой маске индексируются? Название: Re: [windows] список USB накопителей Отправлено: ритт от Августа 26, 2009, 23:27 конечно.
выведи dos-имена всех дисков - увидишь разницу... Название: Re: [windows] список USB накопителей Отправлено: kuzulis от Августа 27, 2009, 07:55 А не проще ли читать реестр на предмет нужной информации? Пусть "ядро" самой винды берет инфу и кладет в реестр!
А Вы уже из рееестра! :) Название: Re: [windows] список USB накопителей Отправлено: Hordi от Августа 27, 2009, 13:51 Вот тут я вендора и продукт айди получаю - ищи "SELECT * FROM Win32_USBControllerDevice".
Код: void DrivesEnumerator::setDriveInfoEx(std::vector<DriveInfo>& rez,bool hasUSB) Название: Re: [windows] список USB накопителей Отправлено: NurMKM от Марта 13, 2013, 09:08 Вот тут я вендора и продукт айди получаю - ищи "SELECT * FROM Win32_USBControllerDevice". Всем привет. Hordi, у меня такая же задача найти вендор ид и прод ид USB флешки. Я не знаком с QT. Я вставил ваш код но у меня ссыпаются ошибки. Можете вы проконсультировать. #include "stdafx.h" #include <iostream> #include <WTypes.h> using namespace std; #define _WIN32_DCOM #include <comdef.h> #include <Wbemidl.h> # pragma comment(lib, "wbemuuid.lib") Я добавил эти библиотеки может еще какие то надо, что бы решить эти ошибки. 1>c:\users\user\desktop\c++\projects\wmi_device_pid\wmi_device_pid\wmi_device_pid.cpp(178): error C2065: 'r' : undeclared identifier 1>c:\users\user\desktop\c++\projects\wmi_device_pid\wmi_device_pid\wmi_device_pid.cpp(178): error C2228: left of '._name' must have class/struct/union 1> type is ''unknown-type'' 1>c:\users\user\desktop\c++\projects\wmi_device_pid\wmi_device_pid\wmi_device_pid.cpp(182): error C2065: 'hasUSB' : undeclared identifier 1>c:\users\user\desktop\c++\projects\wmi_device_pid\wmi_device_pid\wmi_device_pid.cpp(190): error C2446: '==' : no conversion from 'const char *' to 'BSTR' 1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast 1>c:\users\user\desktop\c++\projects\wmi_device_pid\wmi_device_pid\wmi_device_pid.cpp(190): error C2440: '==' : cannot convert from 'const char [4]' to 'BSTR' 1>c:\users\user\desktop\c++\projects\wmi_device_pid\wmi_device_pid\wmi_device_pid.cpp(198): error C2065: 'unicodeString' : undeclared identifier 1>c:\users\user\desktop\c++\projects\wmi_device_pid\wmi_device_pid\wmi_device_pid.cpp(198): error C2146: syntax error : missing ';' before identifier 's' 1>c:\users\user\desktop\c++\projects\wmi_device_pid\wmi_device_pid\wmi_device_pid.cpp(198): error C2065: 's' : undeclared identifier 1>c:\users\user\desktop\c++\projects\wmi_device_pid\wmi_device_pid\wmi_device_pid.cpp(201): error C2653: 'unicodeString' : is not a class or namespace name 1>c:\users\user\desktop\c++\projects\wmi_device_pid\wmi_device_pid\wmi_device_pid.cpp(201): error C2065: 'size_type' : undeclared identifier Название: Re: [windows] список USB накопителей Отправлено: Alex Custov от Марта 13, 2013, 21:32 добавляю namespace, который я использовал в конечном проекте. Функция Ddk::drives(num) возвращает подключённые USB накопители, размер которых минимум num байт. Перед работой нужно вызвать Ddk::init()
Название: Re: [windows] список USB накопителей Отправлено: lolbla2 от Марта 15, 2013, 10:16 А как насчёт посмотреть в сторону libusb?
Название: Re: [windows] список USB накопителей Отправлено: kuzulis от Марта 15, 2013, 11:40 Под Windows проще всего использовать энумерацию устройств конкретного класса через SetupAPI:
SetupDiGetDeviceRegistryProperty + SetupDiOpenDevRegKey + SetupDiGetClassDevs + SetupDiEnumDeviceInfo см. MSDN и гугл. :) UPD: И никаких заголовков и прочего от WDK не нужно. |