
Определение точной модели мыши через Python опирается на данные, которые система предоставляет о подключённых HID-устройствах. Обычно это идентификаторы VID и PID, позволяющие однозначно связать устройство с записью в базе USB. Эти данные можно получить через модули hidapi, pyusb или системные утилиты, вызываемые из скрипта.
В большинстве случаев мыши разных производителей используют собственные пары идентификаторов, что делает поиск модели предсказуемым. Проблемы возникают при наличии нескольких устройств одного вендора, нестандартных прошивок или устаревших драйверов. В таких ситуациях полезно дополнительно считывать серийный номер, строку производителя и другие поля, доступные через HID-дескриптор.
Для автоматизации процесса удобно формировать локальную таблицу сопоставления VID/PID → модель. Такой подход избавляет от внешних зависимостей и ускоряет работу скрипта. При регулярном обновлении таблицы можно быстро определять устройства даже редко встречающихся серий.
Получение списка USB-устройств системы из Python

Для первичного определения модели мыши требуется собрать список всех USB-устройств, доступных в системе. На практике удобнее всего использовать библиотеку pyusb, позволяющую обращаться к дескрипторам устройств напрямую через интерфейсы libusb.
Базовый вызов usb.core.find(find_all=True) возвращает генератор с объектами устройств. Каждый объект содержит поля idVendor, idProduct, сведения о конфигурации и строки, предоставленные производителем. Эти данные формируют основу для дальнейшей фильтрации HID-мышей.
- Проверяйте наличие прав доступа: на Linux может понадобиться отдельное правило udev.
- Отсеивайте устройства без интерфейсов HID, чтобы уменьшить количество проверок.
- Запрашивайте строковые поля производителя и продукта через usb.util.get_string() – они часто помогают при анализе редких моделей.
Фильтрация подключённых устройств по типу HID

После получения общего списка USB-устройств важно оставить только те, которые относятся к классу HID. Класс определяется значением поля bDeviceClass или классом интерфейса внутри конфигурации. Мыши чаще всего используют класс 0x03, поэтому проверка строится вокруг этого значения.
В pyusb доступ к интерфейсам осуществляется через device.get_active_configuration(). Далее можно пройтись по каждому интерфейсу и сравнить bInterfaceClass с кодом HID. Такое сравнение надёжнее, поскольку многие устройства объявляют общий класс 0x00, а нужный тип указывают только на уровне интерфейсов.
При наличии нескольких HID-устройств полезно дополнительно фильтровать их по полю bInterfaceProtocol. У мышей обычно используется код 0x02, что помогает исключить клавиатуры и специализированные контроллеры.
Итоговый набор HID-устройств должен включать только те элементы, которые проходят три проверки: наличие интерфейса HID, корректный протокол и доступность дескрипторов строк. Это упрощает дальнейшее определение модели и исключает лишние устройства уже на раннем этапе.
Извлечение идентификаторов производителя и продукта (VID/PID)

VID и PID дают возможность связать устройство с конкретной моделью. В объектах устройств pyusb эти значения доступны напрямую через поля idVendor и idProduct. Оба параметра представлены в виде целых чисел, соответствующих записям в базе USB Implementers Forum.
Для большинства мышей этих двух идентификаторов достаточно, чтобы определить линейку устройства или точную модель. Если у производителя множество серий с одинаковым VID, уточнение выполняется с помощью дополнительных строковых полей, но именно пара VID/PID служит базой для поиска.
- Проверяйте, что устройство предоставляет корректные числовые значения, поскольку некоторые бюджетные модели используют прошивки без уникальных PID.
- Сравнивайте VID/PID с локальной таблицей, сформированной заранее. Это позволяет исключить сетевые адаптеры и другие устройства, использующие HID-интерфейс лишь частично.
- При обработке нескольких мышей сохраняйте значения в список структур, чтобы далее быстро применить фильтрацию по протоколу и строковым полям.
Собранные VID и PID можно сразу передавать в функцию поиска модели. Такой подход уменьшает объём последующих проверок и упорядочивает обработку данных, особенно в конфигурациях с несколькими одинаковыми устройствами.
Определение модели мыши по базе USB-идентификаторов

После получения VID и PID следующая задача – связать эти значения с конкретной моделью. Проще всего использовать локальную базу, сформированную из открытых списков USB ID или собственной выборки устройств. Формат обычно представляет собой словарь, где ключом служит строка вида «VID:PID», а значением – название модели.
Поиск выполняется через прямое сравнение идентификаторов. Такой подход позволяет моментально определить устройство, если оно присутствует в базе. При отсутствии точного совпадения полезно проверять укороченные записи: некоторые производители сохраняют единый VID для всей линейки и различают изделия только по строковым полям.
При создании собственной базы учитывайте разницу между модификациями устройств. Нередко одна серия выпускается в нескольких вариантах с разными PID. Если база хранит только старые значения, новая версия мыши будет определена неверно.
Для ускорения дальнейших операций удобно использовать структуру, где хранятся несколько параметров: предполагаемое название модели, производитель, серия и год выпуска. Это помогает различать устройства с похожими идентификаторами и уточнять модель при совпадении VID/PID у нескольких продуктов одного бренда.
Получение характеристик мыши через библиотеку hidapi
Библиотека hidapi позволяет обращаться к HID-устройствам без низкоуровневых вызовов libusb. После открытия устройства по VID и PID можно запросить строковые поля, данные отчётов и параметры, заложенные производителем. Это упрощает уточнение модели и проверку фактических характеристик.
Для получения строк устройства используются функции get_manufacturer_string(), get_product_string() и get_serial_number_string(). Если производитель корректно заполнил дескрипторы, эти строки помогут различить близкие модели одной линейки и подтвердить данные, найденные в базе USB-идентификаторов.
Некоторые мыши предоставляют дополнительные данные через HID-отчёты: текущий DPI, состояние кнопок, поддерживаемые режимы работы сенсора. Доступ к ним осуществляется через методы чтения и записи отчётов. Такой подход полезен при анализе игровых моделей с расширенными функциями.
| Параметр | Метод hidapi | Назначение |
|---|---|---|
| Производитель | get_manufacturer_string() | Идентификация бренда и проверка корректности модели |
| Название продукта | get_product_string() | Сопоставление дескриптора с записью в базе VID/PID |
| Серийный номер | get_serial_number_string() | Различение нескольких одинаковых устройств |
| HID-отчёты | read()/write() | Получение параметров сенсора и служебных данных |
Совмещение данных из hidapi с VID/PID позволяет точно определить модель мыши даже в случаях, когда производитель использует одинаковые идентификаторы для нескольких ревизий устройства.
Проверка корректности найденной модели при нескольких подключённых устройствах

Когда к системе подключено несколько HID-устройств, однозначное определение модели мыши требует дополнительных проверок. VID и PID могут повторяться у разных устройств одного производителя, поэтому проверка должна включать строковые дескрипторы и протокол интерфейса.
Рекомендуется использовать сочетание следующих параметров:
- idVendor и idProduct – базовые идентификаторы устройства;
- Строка производителя (manufacturer_string) – помогает отличить устройства с одинаковыми VID/PID;
- Строка продукта (product_string) – уточняет модель внутри линейки;
- Протокол интерфейса (bInterfaceProtocol) – подтверждает, что устройство действительно мышь, а не клавиатура или контроллер.
Если несколько устройств совпадают по всем параметрам, для различения используют серийные номера (serial_number_string) или HID-отчёты с уникальными данными сенсора. Такой подход позволяет исключить ошибки при автоматическом определении модели в сценариях с несколькими подключёнными мышами одновременно.
Автоматизация поиска модели мыши внутри Python-скрипта

Для автоматизации определения модели мыши внутри скрипта удобно объединить все этапы: сканирование USB-устройств, фильтрацию HID, извлечение VID/PID и проверку по базе идентификаторов. Использование функций и классов позволяет повторно использовать код при подключении новых устройств без ручного вмешательства.
Практическая схема работы скрипта может выглядеть так:
- Сбор всех подключённых USB-устройств через pyusb или hidapi;
- Фильтрация по HID-классу и протоколу мыши;
- Извлечение идентификаторов idVendor и idProduct и строки производителя и продукта;
- Сравнение с локальной базой USB-идентификаторов для определения модели;
- При совпадении нескольких устройств – дополнительная проверка по серийному номеру или HID-отчётам.
Результат может быть представлен в виде словаря, где ключ – уникальный идентификатор устройства, а значение – найденная модель. Такой подход позволяет интегрировать определение модели мыши в утилиты для тестирования, мониторинга или настройки устройств без необходимости ручного вмешательства и проверки каждой мыши отдельно.
Вопрос-ответ:
Как получить список всех USB-устройств в Python?
Для получения списка USB-устройств удобно использовать библиотеку pyusb. Вызов usb.core.find(find_all=True) возвращает генератор всех подключённых устройств. Каждое устройство содержит поля idVendor, idProduct и информацию о конфигурациях. Эти данные можно использовать для фильтрации HID-устройств и дальнейшего определения модели мыши.
Почему важно фильтровать устройства по классу HID?
Многие USB-устройства используют общий интерфейс, но мыши относятся к HID-классу (код 0x03). Проверка поля bInterfaceClass у каждого интерфейса позволяет исключить клавиатуры, геймпады и другие устройства. Для мышей дополнительно проверяется протокол интерфейса (0x02), чтобы убедиться, что выбранное устройство действительно предназначено для работы с курсором.
Как узнать модель мыши по VID и PID?
VID (Vendor ID) и PID (Product ID) идентифицируют производителя и продукт. После извлечения этих значений из устройства их сравнивают с локальной или открытой базой USB-идентификаторов. Если база содержит запись с совпадающими VID и PID, можно определить точную модель мыши. В случаях совпадения нескольких устройств используют строки производителя и продукта для уточнения.
Какие дополнительные данные можно получить через hidapi?
Библиотека hidapi позволяет читать строковые дескрипторы: manufacturer_string, product_string, serial_number_string. Также можно получать HID-отчёты, содержащие настройки сенсора, DPI, состояние кнопок и режим работы. Эти данные помогают различать устройства с одинаковыми VID/PID и подтверждать модель, особенно у игровых или профессиональных мышей.
Как автоматизировать определение модели при нескольких подключённых мышах?
Для автоматизации создаётся скрипт, который выполняет последовательность действий: сбор всех USB-устройств, фильтрация по HID-классу и протоколу, извлечение VID/PID и строковых дескрипторов, сопоставление с базой идентификаторов. Если несколько мышей совпадают по идентификаторам, дополнительно проверяются серийные номера или HID-отчёты. Результаты можно сохранить в словарь для дальнейшей работы без ручной проверки.
Можно ли определить модель мыши через Python без установки дополнительных драйверов?
Да, большинство стандартных мышей поддерживают HID-протокол, который предоставляет VID, PID и строки производителя и продукта. Через библиотеки pyusb или hidapi эти данные можно получить напрямую из операционной системы без установки дополнительных драйверов. Для нестандартных или старых устройств может понадобиться установка библиотек libusb или обновление системных прав доступа.
Как различать несколько одинаковых моделей мышей, подключённых одновременно?
Если несколько мышей одного производителя и модели подключены одновременно, VID и PID будут одинаковыми. Для различения используют серийные номера (serial_number_string) и строки производителя и продукта. В некоторых случаях помогает чтение HID-отчётов, где содержатся уникальные параметры сенсора или настройки кнопок. Сбор этих данных позволяет точно идентифицировать каждое устройство и избежать ошибок при автоматическом определении модели.
