Поиск серийного номера монитора Apple
Узнайте, как найти серийный номер монитора Apple Studio Display, Apple Pro Display XDR, Thunderbolt Display или Apple Cinema Display.
Сначала см. этот раздел
- На компьютере Mac, к которому подключен монитор: выберите меню Apple > «Об этом Mac», нажмите «Отчет о системе», а затем — «Графика/Мониторы».
- На оригинальной упаковке продукта.
Серийный номер можно также найти в других местах, таких как сам монитор или его подставка, как описано ниже.
Apple Studio Display
Серийный номер монитора Studio Display можно найти в следующих местах:
- Нижняя панель подставки: для просмотра серийного номера возьмите монитор за боковые стороны и аккуратно положите его экраном вниз на мягкое чистое полотенце или ткань.

- Основание монтажного адаптера VESA:

Apple Pro Display XDR
Серийный номер Pro Display XDR указан на вставке на задней панели монитора. Узнайте, как отсоединить монитор Pro Display XDR от подставки Pro Stand или от монтажного адаптера VESA.

Мониторы Thunderbolt Display и Apple Cinema Display
Серийный номер монитора можно найти в следующих местах:

- На основании монитора: для просмотра серийного номера возьмите монитор за боковые стороны и аккуратно положите его экраном вниз на мягкое чистое полотенце или ткань.
- На оригинальном чеке (или в счете-фактуре).
- На шарнирном механизме: для просмотра серийного номера на шарнирном механизме необходимо снять подставку. Этот серийный номер может потребоваться, если оригинальная подставка снята для установки дополнительного монтажного адаптера VESA.
Просмотр модели и серийного номера монитора
HUAWEI MateView SE, HUAWEI MateView B3-241H и HUAWEI MateView B3-242H
Способ 1 (проверка серийного номера в экранном меню). Включите монитор, смотря на него, нажмите в центре кнопки-джойстика вверх, чтобы открыть меню настроек монитора. Выберите Настройки > Сведения , чтобы посмотреть серийный номер монитора.
Способ 2 (проверка серийного номера на наклейке). Серийный номер указан на наклейке рядом с портом на задней панели монитора.
HUAWEI MateView
Выполните следующие действия, чтобы посмотреть серийный номер на наклейке. Осторожно положите монитор экраном вверх и посмотрите серийный номер на наклейке на нижней панели монитора.

Серия HUAWEI MateView GT
проверка серийного номера на наклейке. Снимите защитную крышку с порта на задней панели монитора, под портом вы увидите наклейку.

HUAWEI Display 23.8″ и HUAWEI Display S24
Выполните следующие действия, чтобы посмотреть серийный номер на наклейке. Найдите кнопку над портом на задней панели монитора, нажмите на кнопку вверх, приподнимите нижнюю часть крепления основания и извлеките основание. Вы увидите наклейку.
Как узнать серийный номер монитора

Как узнать модель и серийный номер монитора
EDID — Extended Display Identification Data — стандарт формата данных VESA, расширенные данные идентификации дисплея. Эта информация передается монитором или телевизором на устройство, которое генерирует видео сигнал. EDID содержит базовую информацию о мониторе и его возможностях, включая информацию о производителе, максимальном размере, цветовых характеристиках, заводских таймингах, границах частотного диапазона и другие технические данные. Кроме этого в EDID записаны строки, содержащие модель монитора и его серийный номер. Вот они-то нас и интересуют.
После подключения и установки драйверов монитора в систему, в реестре для него формируется соответствующая запись. Нам остается только ее найти, прочитать и извлечь нужные данные. В интернетах можно найти официальный мануал VESA по стандарту EDID.
VESA Enhanced EDID Standard (ENG)
В документе почти сотня страниц, много теории и всякой технической заумности, поскольку применение EDID очень широкое. Быстро найти нужную информацию, мягко говоря, проблематично. В английском варианте статьи на Википедии эта информация разложена более понятным образом. Итак, в структуре EDID в байтах 54-125 должны быть записаны 4 блока идентификаторов. Структура каждого идентификатора описана там же. Забегая вперед отмечу, что слово «должны» некоторые производители понимают по-своему. Например, для моего маленького китайского монитора серийный номер вообще не узнать, так как в EDID записаны два блока таймингов, диапазоны работы монитора и название модели. При парсинге такие ситуации придется учитывать.
Переходим к программированию. Несколько структур, часть из которых вы уже видели в статье про выключение мониторов. Там же описан и принцип работы с мониторами, как получить их список, как получить хэндл и прочее. Настоятельно рекомендую ознакомиться, чтобы у вас не возникало вопросов, а мне не пришлось дублировать теоретические выкладки.
Code (Assembler) : Убрать нумерациюВыделить код
- struct PHYSICAL_MONITOR
- hPhysicalMonitor dd ?
- szPhysicalMonitorDescription rw 128
- ends
- struct MONITORINFOEX
- cbSize dd ?
- rcMonitor RECT
- rcWork RECT
- dwFlags dd ?
- szDevice rb 32
- ends
- struct DISPLAY_DEVICE
- cb dd ?
- DeviceName rb 32
- DeviceString rb 128
- StateFlags dd ?
- DeviceID rb 128
- DeviceKey rb 128
- ends
Callback-функция для EnumDisplayMonitors, помимо уже знакомого вам функционала из статьи по ссылке выше, дополнена кодом получения и парсинга EDID.
Code (Assembler) : Убрать нумерациюВыделить код
- ;———————————————————
- ; Callback-функция перебора мониторов
- ;———————————————————
- proc MonitorEnumProc hMonitor : DWORD , hdc : DWORD , lpRect : DWORD , lParam : DWORD
- locals
- ; Количество мониторов
- num dd ?
- ; Массив PHYSICAL_MONITOR
- hMonArray dd ?
- MonArray dd ?
- Manufacturer dd ?
- CurrentValue dd ?
- MaximumValue dd ?
- CurrentS dd ?
- MaximumS dd ?
- ResS dd ?
- endl
- ; Получить количество физических мониторов
- leaeax , [ num ]
- invoke GetNumberOfPhysicalMonitorsFromHMONITOR , [ hMonitor ] , eax
- ; Физических мониторов нет
- cmp [ num ] , 0
- je . loc_ret
- ; Зарезервировать память под массив PHYSICAL_MONITOR
- moveax , [ num ]
- imuleax , sizeof . PHYSICAL_MONITOR
- invoke GlobalAlloc , GMEM_MOVEABLE + GMEM_DDESHARE , eax
- mov [ hMonArray ] , eax
- invoke GlobalLock , [ hMonArray ]
- mov [ MonArray ] , eax
- ; Получить информацию о всех физических мониторах
- invoke GetPhysicalMonitorsFromHMONITOR , [ hMonitor ] , [ num ] , [ MonArray ]
- ; Выключить все мониторы поочередно
- movecx , [ num ]
- movesi , [ MonArray ]
- . loc_monitors_loop :
- pushecx
- pushesi
- ; Информация о мониторе
- mov [ minfo . cbSize ] , sizeof . MONITORINFOEX
- invoke GetMonitorInfo , [ hMonitor ] , minfo
- mov [ dds . cb ] , sizeof . DISPLAY_DEVICE
- invoke EnumDisplayDevices , minfo . szDevice , NULL , dds , 0
- invoke RtlZeroMemory , edidmodel , 256
- invoke RtlZeroMemory , edidsn , 256
- invoke RtlZeroMemory , regstr , 256
- ; Сформировать название ключа реестра
- ; SYSTEM\CurrentControlSet\Enum\DISPLAY\
- invoke lstrcpy , regstr , szReg0
- movedi , regstr
- invoke lstrlen , edi
- addedi , eax
- ; Дописать к нему подстроку из DeviceID
- movesi , dds . DeviceID
- @ @ :
- lodsb
- oral , al
- jz . loc_no_devid
- cmpal , ‘\’
- jne @ b
- @ @ :
- lodsb
- oral , al
- jz . loc_no_devid
- stosb
- cmpal , ‘\’
- jne @ b
- ; Открыть ветку реестра
- ; HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY\PHL0904\
- invoke RegOpenKey , HKEY_LOCAL_MACHINE , regstr , hKey
- oreax , eax
- ; Открыть ключ не получилось, пропускаем
- jnz . loc_no_devid
- ; Перебрать все дочерние ключи, начиная с 0
- mov [ dKeysIndex ] , 0
- . loc_scan_keys_monitor :
- ; Просканировать все ключи
- invoke RegEnumKey , [ hKey ] , [ dKeysIndex ] , buff , tmp
- oreax , eax
- jnz . loc_no_more_keys
- ; Сформировать название ключа реестра
- ; SYSTEM\CurrentControlSet\Enum\DISPLAY\PHL0904\
- invoke lstrcpy , buff2 , regstr
- ; 5&217f22ba&0&UID1048848
- invoke lstrcat , buff2 , buff
- ; \Device Parameters
- invoke lstrcat , buff2 , szReg1
- ; Открыть параметр EDID в ключе реестра
- ; HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY\PHL0904\
- ; 5&217f22ba&0&UID1048848\Device Parameters
- invoke RegOpenKeyEx , HKEY_LOCAL_MACHINE , buff2 , 0 , KEY_READ , hSubKey
- oreax , eax
- ; Такого параметра нет, проверить следующий ключ
- jnz . loc_next_key
- ; Прочитать EDID
- invoke RtlZeroMemory , edid , 500h
- mov [ tmp ] , 500h
- invoke RegQueryValueEx , [ hSubKey ] , szReg2 , 0 , 0 , edid , tmp
- oreax , eax
- jnz . loc_no_edid
- ; Найти в EDID строки Serial Number и Model
- xorecx , ecx
- ; Начинаем разбор с 72-го байта
- movebx , 48h
- . loc_scan_edid :
- movesi , ebx
- addesi , edid
- movbyte [ esi + 18 ] , 0
- ; Serial Number
- cmpdword [ esi ] , 0xFF000000
- jne . loc_not_edidsn
- addesi , 5
- movedi , edidsn
- . loc_move_edidsn :
- lodsb
- cmpal , 20h
- jb . loc_next_edid
- stosb
- jmp . loc_move_edidsn
- . loc_not_edidsn :
- ; Model
- cmpdword [ esi ] , 0xFC000000
- jne . loc_next_edid
- addesi , 5
- movedi , edidmodel
- . loc_move_edidmodel :
- lodsb
- cmpal , 20h
- jb . loc_next_edid
- stosb
- jmp . loc_move_edidmodel
- . loc_next_edid :
- addebx , 18
- incecx
- cmpecx , 2
- jbe . loc_scan_edid
- . loc_no_edid :
- ; Закрыть ключ
- invoke RegCloseKey , [ hSubKey ]
- . loc_next_key :
- ; Следующий индекс
- inc [ dKeysIndex ]
- jmp . loc_scan_keys_monitor
- . loc_no_more_keys :
- invoke RegCloseKey , [ hKey ]
- . loc_no_devid :
- ; edidsn -> Serial Number, если есть
- ; edidmodel -> Model
- ; или пустые строки, если записи о мониторе в реестре нет
- invoke wsprintf , buff , mask , edidmodel , edidsn
- addesp , 16
- invoke MessageBox , 0 , buff , dds . DeviceName , 0
- . loc_next_monitor :
- ; Следующая запись из массива PHYSICAL_MONITOR
- popesi
- addesi , sizeof . PHYSICAL_MONITOR
- popecx
- subecx , 1
- jnz . loc_monitors_loop
- ; Прибраться за собой
- invoke DestroyPhysicalMonitors , [ num ] , [ MonArray ]
- ; Освободить память
- invoke GlobalUnlock , [ hMonArray ]
- invoke GlobalFree , [ hMonArray ]
- . loc_ret :
- ; Продолжаем обработку
- moveax , TRUE
- ret
- endp
Теперь подробно, что тут происходит. Получив хэндл монитора, получаем информацию о нем при помощи функции GetMonitorInfo и EnumDisplayDevices. В отличие от устройств ввода, системное имя монитора возвращается в урезанном варианте, например, MONITOR\PHL0904\{4d36e96e-e325-11ce-bfc1-08002be10318}\0007. Из этой строки можно извлечь только класс устройства и Vendor ID. Этого достаточно, чтобы сформировать название ключа реестра вида HKLM\SYSTEM\CurrentControlSet\Enum\DISPLAY\PHL0904. После этого надо перебрать все вложенные ключи с уникальным идентификатором устройства, так как для одного устройства может быть создано несколько таких записей. Например, при подключении монитора к разным видеовыходам. В каждом вложенном ключе надо будет проверить наличие вложенного ключа Device Parameters с параметром EDID, перебирая их поочередно. Таким образом, в конечном итоге ключ реестра будет иметь вид HKLM\SYSTEM\CurrentControlSet\Enum\DISPLAY\PHL0904\5&217f22ba&0&UID1048848\Device Parameters или что-то подобное в зависимости от вашего железа.
Прочитав из реестра значение параметра EDID, мы получим EDID монитора. Он хранится в бинарном виде, так что приступаем к парсингу. В соответствии со стандартом, четыре 18-байтных идентификатора находятся в EDID с 54-го байта. Последовательность и назначение блоков ничем не регламентировано, поэтому надо проверять все четыре. Структура текстовых блоков простейшая: три нулевых байта, байт описания идентификатора, снова нулевой байт и затем ASCII-строка, которая заканчивается или на последнем байте идентификатора, или на любом непечатном символе с кодом меньше 20h. Таким образом максимальная длина строки серийного номера или названия модели монитора может быть 13 символов. Байт описания идентификатора 0FFh соответствует серийному номеру монитора, байт 0FCh — названию модели.
Как я говорил выше, в зависимости от производителя монитора, искомых строк в EDID может вообще не оказаться, или может быть только название модели, с этим я уже столкнулся на практике. Также выяснилось, что при подключении одного и того же монитора к разным компьютерам, получаемые значения его серийного номера могут отличаться. Я не могу даже предположить, с чем это связано. Ну и теоретически, раз уж EDID хранится локально в реестре, то его можно модифицировать, изменив какие-нибудь байты и подкорректировав контрольную сумму. Так что безоговорочно доверять данным EDID не надо.

Скриншот программы Phoenix EDID Designer
Для более детального изучения структуры EDID, а также для редактирования имеющихся значений, можно воспользоваться малюсенькой утилитой Phoenix EDID Designer. Ее разработка прекращена, офсайт недоступен, последнюю версию я выложил сюда.
Phoenix EDID Designer 1.3
В приложении пример программы с исходным текстом, которая выводит название модели и серийный номер для каждого подключенного монитора.
Пример программы с исходным текстом (FASM)
Как определить модель и серийный номер техники
Точное указание модели и серийного номера изделия может понадобиться при оформлении заявки на вызов мастера или при приобретении запасной части и комплектующих. Точная модель и серийный номер указываются на гарантийном талоне, в сервисном сертификате или в товарном чеке. В случае отсутствия этих документов или необходимости проверки указанных в них данных необходимо обратиться к сервисной наклейке, которая носит индивидуальный характер и находится непосредственно на корпусе изделия. Данная наклейка содержит полную информацию об изделии и должна сохраняться на протяжении всего срока его эксплуатации.
В зависимости от вида техники и марки сервисные наклейки могут быть расположены в разных местах. Ниже мы перечислили наиболее распространенные места их расположения производителем и схемы определения моделей и серийных номеров с их помощью.
- Стиральная машина, сушильная машина
- Посудомоечная машина
- Водонагреватель
- Электрическая плита, газовая плита
- Варочная поверхность
- Духовой шкаф
- Холодильник, морозильник
- Телевизор, монитор
- Кухонный комбайн
- Мясорубка
- Пылесос
- СВЧ-печь
Определение модели на стиральных машинах
Наиболее вероятным местом расположения наклейки с информацией о модели стиральной машины является проем дверки люка. На технике марок Аристон, Индезит, Самсунг, Беко, Канди, Ханца и многих других достаточно открыть люк загрузки белья и внимательно осмотреть корпус.
На стиральных машинах Занусси, Электролюкс, Ардо, Вирпул, Атлант сервисная наклейка расположена на внутренней поверхности плинтуса или лючка сливного фильтра. На машинах с вертикальной загрузкой белья производители размещают данные о модели на внутренней стороне плинтуса.
Если вы не обнаружили наклейку на вышеуказанных местах, то отодвиньте технику и внимательно осмотрите заднюю стенку. Там тоже может находиться заводской шильд.
После уточнения модели и серийного номера вашей стиральной машины вы сможете помочь заранее определить стоимость ремонта стиральной машины.
Определение модели у посудомоечных машин
Определить данные модели и серийного номера на посудомоечных машинах очень просто. Откройте дверку и внимательно осмотрите торец дверки. Серийная наклейка размещается на боковом или верхнем торце двери.
Определившись с моделью вы можете смело обращаться к нашим специалистам по ремонту посудомоечных машин.
Определение модели водонагревателя
Определить модель водонагревателя и его серийный номер очень просто. Производители водонагревателей заводскую наклейку с точной информацией о модели располагают на нижнем фланце техники. Вам необходимо просто взглянуть на нижнюю часть техники.
После определения модели и серийного номера вы можете с чистой совестью обратиться к нашим специалистам по ремонту водонагревателей.
Определение данных модели электрических и газовых плит

Как правило, на электрических и газовых плитах данные о модели размещаются на внутренней стороне дверки ящика для принадлежностей. Если здесь обнаружить шильдик не удалось, достаньте ящик для принадлежностей и внимательно осмотрите поверхность дна плиты. Серийная наклейка может также располагаться на задней стенке корпуса.
После определения серийного номера и модели плиты вы можете связаться с нашими специалистами и предметно обсудить ремонт электроплиты.
Определение данных модели варочной поверхности
На варочной поверхности наклейка с данными о модели расположена на нижней плоскости поверхности. Для ее осмотра необходимо извлечь технику из проема в столешнице. Данная операция может вызвать затруднения, поэтому, прежде чем встраивать варочную поверхность, сверьте данные модели и серийного номера, указанные в гарантийных документах, с данными на сервисной наклейке.
Определение модели духового шкафа

Найти сервисную наклейку на духовом шкафе очень просто. Для этого необходимо открыть дверь духовки и осмотреть проем шкафа и внутреннюю часть двери. Наиболее вероятным местом расположения является передняя рамка проема духового шкафа.
Определение данных модели холодильника
Производители холодильников в большинстве случаев располагают заводскую наклейку в легкодоступном месте – внутри холодильной камеры. В холодильниках марки Индезит, Стинол, Аристон, Элджи, Ардо, Самсунг, Беко наклейка находится на боковой стенке внутри холодильной камеры. В холодильниках Бош, Занусси, Электролюкс информация размещена внутри холодильной камеры за ящиком для овощей.
В некоторых моделях холодильников Самсунг и Элджи наклейку можно найти снаружи корпуса на боковой стенке. Если Вы не обнаружили заводской шильд ни в одном из ранее перечисленных мест, то выдвиньте его и внимательно осмотрите заднюю стенку корпуса. Такое место расположения наиболее вероятно у Норда и Атланта.
Определившись с моделью и серийным номером вашего холодильника вы можете смело обращаться к нашим высококвалифицированным специалистам по ремонту холодильников.
Определение модели телевизора, монитора
На телевизорах и мониторах производители размещают наклейки с полной информацией о модели и серийном номере на задней поверхности корпуса.
После того как вы определите модель и серийный номер вашего устройства, вы можете обратиться за помощью к нашим специалистам по ремонту телевизоров и мониторов.
Определение модели на мелкой бытовой технике
На кухонных комбайнах, мясорубках, пылесосах, чайниках сервисные наклейки находятся на нижней части самого изделия. На фенах, блендерах данные выгравированы на пластике ручки изделия. На утюгах заводская наклейка расположена на юбке утюга. Если вы затрудняетесь найти наклеку в указанном месте, внимательно осмотрите корпус изделия, заводская маркировка обязательно присутствует либо в виде наклейки, либо в виде гравировки.
Обратиться к нашим специалистам, уточнив модель и серийник своей техники будет мудрым решением для ремонта комбайна или другой техники
Определение модели СВЧ-печи
Для определения правильной модели СВЧ-печи осмотрите заднюю поверхность печи, заводская наклейка находится с обратной стороны техники.
Обратиться за ремонтом микроволновой печи вы можете в нашу компанию.
Предоставленная информация является уникальной и собрана в данной статье для вашего удобства при оформлении заявок на вызов мастера и заказа деталей. Если у вас остались вопросы, обращаетесь в нашу единую диспетчерскую службу по телефону: 310-00-91.
Так же много интересной информации Вы сможете узнать в статье:«Гарантийный ремонт: что о нем необходимо знать?»
Всегда готовы помочь!
Вызов мастера
Оформите заявку на сайте, мы свяжемся с вами в ближайшее время и ответим на все интересующие вопросы.
Поиск серийного номера монитора Apple
Узнайте, как найти серийный номер монитора Apple Studio Display, Apple Pro Display XDR, Thunderbolt Display или Apple Cinema Display.
Сначала см. этот раздел
- На компьютере Mac, к которому подключен монитор: выберите меню Apple > «Об этом Mac», нажмите «Отчет о системе», а затем — «Графика/Мониторы».
- На оригинальной упаковке продукта.
Серийный номер можно также найти в других местах, таких как сам монитор или его подставка, как описано ниже.
Apple Studio Display
Серийный номер монитора Studio Display можно найти в следующих местах:
- Нижняя панель подставки: для просмотра серийного номера возьмите монитор за боковые стороны и аккуратно положите его экраном вниз на мягкое чистое полотенце или ткань.

- Основание монтажного адаптера VESA:

Apple Pro Display XDR
Серийный номер Pro Display XDR указан на вставке на задней панели монитора. Узнайте, как отсоединить монитор Pro Display XDR от подставки Pro Stand или от монтажного адаптера VESA.

Мониторы Thunderbolt Display и Apple Cinema Display
Серийный номер монитора можно найти в следующих местах:

- На основании монитора: для просмотра серийного номера возьмите монитор за боковые стороны и аккуратно положите его экраном вниз на мягкое чистое полотенце или ткань.
- На оригинальном чеке (или в счете-фактуре).
- На шарнирном механизме: для просмотра серийного номера на шарнирном механизме необходимо снять подставку. Этот серийный номер может потребоваться, если оригинальная подставка снята для установки дополнительного монтажного адаптера VESA.
Как узнать серийный номер монитора
Продукты и информация
- Ноутбуки
- Сетевое оборудование
- Материнские платы
- Видеокарты
- Смартфоны
- Мониторы
- Показать все продукты
-
Item_other —>
- Моноблоки (All-in-One)
- Планшеты
- Коммерческое сетевое оборудование
- Серия ROG
- AIoT и промышленные решения
- Блоки питания
- Проекторы
- VivoWatch
- Настольные ПК
- Компактные ПК
- Внешние накопители и оптические приводы
- Звуковые карты
- Игровое сетевое оборудование
- Одноплатный компьютер
- Корпуса
- Компьютер-брелок
- Наушники и гарнитуры
- Охлаждение
- Chrome-устройства
- Коммерческие
-
Commercial_list.Item —>
- Моноблоки (All-in-One)
- Информационные панели
- Ноутбуки
- Настольные ПК
- Мониторы
- Серверы и рабочие станции
- Проекторы
- Компактные ПК
- Сетевое оборудование
- Материнские платы
- Игровые станции
- Data Storage
Как получить название и серийный номер периферии?
Можно как-нибудь через cmd/powershell получить информацию о мышке, клавиатуре, мониторе, а именно: производитель, модель и серийный номер?
- Вопрос задан более трёх лет назад
- 4703 просмотра
Комментировать
Решения вопроса 0
Ответы на вопрос 1
Можно. Конкретнее могу подсказать только по мониторам: есть два способа — по EDID (в реестре), и по Get-WmiObject WMIMonitorID -Namespace root\wmi (для powershell v2 есть тут код: https://social.technet.microsoft.com/Forums/script. ), для v1 не совсем работает, нужно чуть менять.
Проблема в том, что в winxp можно по EDID и дл всех, вплоть до win10. В win10 в реестре убрали подветвь Control, по наличию которой можно определить активный (подключенный сейчас) монитор, и можно только по WMIMonitorID, а в winxp и вовсе нет WMIMonitorID — так что только по EDID.
Конкретику можно нагуглить. Всё это можно и удалённо, и локально получить.
Про мышки-клавы не пробовал, не было надобности, но в том же WMI всяких сведений полно, думаю, будет и про них. А уж через что получать — через powershell или утилитой gwmi, или есть ещё devid (если не ошибся в написании) — это диспетчер устройств, только консольный вариант, локально и при наличии прав админа — всё что угодно можно посмотреть (насчёт серийников не уверен, возможно, и нет таких там возможностей, да их вроде бы USB HID и не показывают, поправьте если не так).
Ответ написан более трёх лет назад
Нравится 1 2 комментария
Как узнать серийный номер монитора

Как узнать модель и серийный номер монитора
EDID — Extended Display Identification Data — стандарт формата данных VESA, расширенные данные идентификации дисплея. Эта информация передается монитором или телевизором на устройство, которое генерирует видео сигнал. EDID содержит базовую информацию о мониторе и его возможностях, включая информацию о производителе, максимальном размере, цветовых характеристиках, заводских таймингах, границах частотного диапазона и другие технические данные. Кроме этого в EDID записаны строки, содержащие модель монитора и его серийный номер. Вот они-то нас и интересуют.
После подключения и установки драйверов монитора в систему, в реестре для него формируется соответствующая запись. Нам остается только ее найти, прочитать и извлечь нужные данные. В интернетах можно найти официальный мануал VESA по стандарту EDID.
VESA Enhanced EDID Standard (ENG)
В документе почти сотня страниц, много теории и всякой технической заумности, поскольку применение EDID очень широкое. Быстро найти нужную информацию, мягко говоря, проблематично. В английском варианте статьи на Википедии эта информация разложена более понятным образом. Итак, в структуре EDID в байтах 54-125 должны быть записаны 4 блока идентификаторов. Структура каждого идентификатора описана там же. Забегая вперед отмечу, что слово «должны» некоторые производители понимают по-своему. Например, для моего маленького китайского монитора серийный номер вообще не узнать, так как в EDID записаны два блока таймингов, диапазоны работы монитора и название модели. При парсинге такие ситуации придется учитывать.
Переходим к программированию. Несколько структур, часть из которых вы уже видели в статье про выключение мониторов. Там же описан и принцип работы с мониторами, как получить их список, как получить хэндл и прочее. Настоятельно рекомендую ознакомиться, чтобы у вас не возникало вопросов, а мне не пришлось дублировать теоретические выкладки.
Code (Assembler) : Убрать нумерациюВыделить код
- struct PHYSICAL_MONITOR
- hPhysicalMonitor dd ?
- szPhysicalMonitorDescription rw 128
- ends
- struct MONITORINFOEX
- cbSize dd ?
- rcMonitor RECT
- rcWork RECT
- dwFlags dd ?
- szDevice rb 32
- ends
- struct DISPLAY_DEVICE
- cb dd ?
- DeviceName rb 32
- DeviceString rb 128
- StateFlags dd ?
- DeviceID rb 128
- DeviceKey rb 128
- ends
Callback-функция для EnumDisplayMonitors, помимо уже знакомого вам функционала из статьи по ссылке выше, дополнена кодом получения и парсинга EDID.
Code (Assembler) : Убрать нумерациюВыделить код
- ;———————————————————
- ; Callback-функция перебора мониторов
- ;———————————————————
- proc MonitorEnumProc hMonitor : DWORD , hdc : DWORD , lpRect : DWORD , lParam : DWORD
- locals
- ; Количество мониторов
- num dd ?
- ; Массив PHYSICAL_MONITOR
- hMonArray dd ?
- MonArray dd ?
- Manufacturer dd ?
- CurrentValue dd ?
- MaximumValue dd ?
- CurrentS dd ?
- MaximumS dd ?
- ResS dd ?
- endl
- ; Получить количество физических мониторов
- leaeax , [ num ]
- invoke GetNumberOfPhysicalMonitorsFromHMONITOR , [ hMonitor ] , eax
- ; Физических мониторов нет
- cmp [ num ] , 0
- je . loc_ret
- ; Зарезервировать память под массив PHYSICAL_MONITOR
- moveax , [ num ]
- imuleax , sizeof . PHYSICAL_MONITOR
- invoke GlobalAlloc , GMEM_MOVEABLE + GMEM_DDESHARE , eax
- mov [ hMonArray ] , eax
- invoke GlobalLock , [ hMonArray ]
- mov [ MonArray ] , eax
- ; Получить информацию о всех физических мониторах
- invoke GetPhysicalMonitorsFromHMONITOR , [ hMonitor ] , [ num ] , [ MonArray ]
- ; Выключить все мониторы поочередно
- movecx , [ num ]
- movesi , [ MonArray ]
- . loc_monitors_loop :
- pushecx
- pushesi
- ; Информация о мониторе
- mov [ minfo . cbSize ] , sizeof . MONITORINFOEX
- invoke GetMonitorInfo , [ hMonitor ] , minfo
- mov [ dds . cb ] , sizeof . DISPLAY_DEVICE
- invoke EnumDisplayDevices , minfo . szDevice , NULL , dds , 0
- invoke RtlZeroMemory , edidmodel , 256
- invoke RtlZeroMemory , edidsn , 256
- invoke RtlZeroMemory , regstr , 256
- ; Сформировать название ключа реестра
- ; SYSTEM\CurrentControlSet\Enum\DISPLAY\
- invoke lstrcpy , regstr , szReg0
- movedi , regstr
- invoke lstrlen , edi
- addedi , eax
- ; Дописать к нему подстроку из DeviceID
- movesi , dds . DeviceID
- @ @ :
- lodsb
- oral , al
- jz . loc_no_devid
- cmpal , ‘\’
- jne @ b
- @ @ :
- lodsb
- oral , al
- jz . loc_no_devid
- stosb
- cmpal , ‘\’
- jne @ b
- ; Открыть ветку реестра
- ; HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY\PHL0904\
- invoke RegOpenKey , HKEY_LOCAL_MACHINE , regstr , hKey
- oreax , eax
- ; Открыть ключ не получилось, пропускаем
- jnz . loc_no_devid
- ; Перебрать все дочерние ключи, начиная с 0
- mov [ dKeysIndex ] , 0
- . loc_scan_keys_monitor :
- ; Просканировать все ключи
- invoke RegEnumKey , [ hKey ] , [ dKeysIndex ] , buff , tmp
- oreax , eax
- jnz . loc_no_more_keys
- ; Сформировать название ключа реестра
- ; SYSTEM\CurrentControlSet\Enum\DISPLAY\PHL0904\
- invoke lstrcpy , buff2 , regstr
- ; 5&217f22ba&0&UID1048848
- invoke lstrcat , buff2 , buff
- ; \Device Parameters
- invoke lstrcat , buff2 , szReg1
- ; Открыть параметр EDID в ключе реестра
- ; HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY\PHL0904\
- ; 5&217f22ba&0&UID1048848\Device Parameters
- invoke RegOpenKeyEx , HKEY_LOCAL_MACHINE , buff2 , 0 , KEY_READ , hSubKey
- oreax , eax
- ; Такого параметра нет, проверить следующий ключ
- jnz . loc_next_key
- ; Прочитать EDID
- invoke RtlZeroMemory , edid , 500h
- mov [ tmp ] , 500h
- invoke RegQueryValueEx , [ hSubKey ] , szReg2 , 0 , 0 , edid , tmp
- oreax , eax
- jnz . loc_no_edid
- ; Найти в EDID строки Serial Number и Model
- xorecx , ecx
- ; Начинаем разбор с 72-го байта
- movebx , 48h
- . loc_scan_edid :
- movesi , ebx
- addesi , edid
- movbyte [ esi + 18 ] , 0
- ; Serial Number
- cmpdword [ esi ] , 0xFF000000
- jne . loc_not_edidsn
- addesi , 5
- movedi , edidsn
- . loc_move_edidsn :
- lodsb
- cmpal , 20h
- jb . loc_next_edid
- stosb
- jmp . loc_move_edidsn
- . loc_not_edidsn :
- ; Model
- cmpdword [ esi ] , 0xFC000000
- jne . loc_next_edid
- addesi , 5
- movedi , edidmodel
- . loc_move_edidmodel :
- lodsb
- cmpal , 20h
- jb . loc_next_edid
- stosb
- jmp . loc_move_edidmodel
- . loc_next_edid :
- addebx , 18
- incecx
- cmpecx , 2
- jbe . loc_scan_edid
- . loc_no_edid :
- ; Закрыть ключ
- invoke RegCloseKey , [ hSubKey ]
- . loc_next_key :
- ; Следующий индекс
- inc [ dKeysIndex ]
- jmp . loc_scan_keys_monitor
- . loc_no_more_keys :
- invoke RegCloseKey , [ hKey ]
- . loc_no_devid :
- ; edidsn -> Serial Number, если есть
- ; edidmodel -> Model
- ; или пустые строки, если записи о мониторе в реестре нет
- invoke wsprintf , buff , mask , edidmodel , edidsn
- addesp , 16
- invoke MessageBox , 0 , buff , dds . DeviceName , 0
- . loc_next_monitor :
- ; Следующая запись из массива PHYSICAL_MONITOR
- popesi
- addesi , sizeof . PHYSICAL_MONITOR
- popecx
- subecx , 1
- jnz . loc_monitors_loop
- ; Прибраться за собой
- invoke DestroyPhysicalMonitors , [ num ] , [ MonArray ]
- ; Освободить память
- invoke GlobalUnlock , [ hMonArray ]
- invoke GlobalFree , [ hMonArray ]
- . loc_ret :
- ; Продолжаем обработку
- moveax , TRUE
- ret
- endp
Теперь подробно, что тут происходит. Получив хэндл монитора, получаем информацию о нем при помощи функции GetMonitorInfo и EnumDisplayDevices. В отличие от устройств ввода, системное имя монитора возвращается в урезанном варианте, например, MONITOR\PHL0904\{4d36e96e-e325-11ce-bfc1-08002be10318}\0007. Из этой строки можно извлечь только класс устройства и Vendor ID. Этого достаточно, чтобы сформировать название ключа реестра вида HKLM\SYSTEM\CurrentControlSet\Enum\DISPLAY\PHL0904. После этого надо перебрать все вложенные ключи с уникальным идентификатором устройства, так как для одного устройства может быть создано несколько таких записей. Например, при подключении монитора к разным видеовыходам. В каждом вложенном ключе надо будет проверить наличие вложенного ключа Device Parameters с параметром EDID, перебирая их поочередно. Таким образом, в конечном итоге ключ реестра будет иметь вид HKLM\SYSTEM\CurrentControlSet\Enum\DISPLAY\PHL0904\5&217f22ba&0&UID1048848\Device Parameters или что-то подобное в зависимости от вашего железа.
Прочитав из реестра значение параметра EDID, мы получим EDID монитора. Он хранится в бинарном виде, так что приступаем к парсингу. В соответствии со стандартом, четыре 18-байтных идентификатора находятся в EDID с 54-го байта. Последовательность и назначение блоков ничем не регламентировано, поэтому надо проверять все четыре. Структура текстовых блоков простейшая: три нулевых байта, байт описания идентификатора, снова нулевой байт и затем ASCII-строка, которая заканчивается или на последнем байте идентификатора, или на любом непечатном символе с кодом меньше 20h. Таким образом максимальная длина строки серийного номера или названия модели монитора может быть 13 символов. Байт описания идентификатора 0FFh соответствует серийному номеру монитора, байт 0FCh — названию модели.
Как я говорил выше, в зависимости от производителя монитора, искомых строк в EDID может вообще не оказаться, или может быть только название модели, с этим я уже столкнулся на практике. Также выяснилось, что при подключении одного и того же монитора к разным компьютерам, получаемые значения его серийного номера могут отличаться. Я не могу даже предположить, с чем это связано. Ну и теоретически, раз уж EDID хранится локально в реестре, то его можно модифицировать, изменив какие-нибудь байты и подкорректировав контрольную сумму. Так что безоговорочно доверять данным EDID не надо.

Скриншот программы Phoenix EDID Designer
Для более детального изучения структуры EDID, а также для редактирования имеющихся значений, можно воспользоваться малюсенькой утилитой Phoenix EDID Designer. Ее разработка прекращена, офсайт недоступен, последнюю версию я выложил сюда.
Phoenix EDID Designer 1.3
В приложении пример программы с исходным текстом, которая выводит название модели и серийный номер для каждого подключенного монитора.
Пример программы с исходным текстом (FASM)