Домой C# Получение модели и серийного номера монитора из Extended Display Identification Data (EDID)...

Получение модели и серийного номера монитора из Extended Display Identification Data (EDID) : Справочник по C#

1199
0


      Extended Display Identification Data (EDID) — стандарт формата данных VESA, который содержит базовую информацию о мониторе и его возможностях, включая информацию о производителе, максимальном размере изображения, цветовых характеристиках, заводских предустановленных таймингах, границах частотного диапазона, а также строках, содержащих название монитора и серийный номер. Информация сохраняется в мониторе и используется для обмена данными с системой через канал экранных данных (англ. DDC, Display Data Channel), который находится между монитором и графическим адаптером. Система использует эту информацию в конфигурационных целях, в итоге монитор и система могут работать вместе синхронизировано. Последняя версия EDID (версия 1.3) может быть использована в ЭЛТ-мониторах, ЖК-мониторах, а также будущих типах мониторов, так как EDID предлагает общее описание почти всех параметров монитора.
      Для просмотра информации о вашем мониторе, запустите редактор реестра. Откройте меню Пуск -> Все программы -> Стандартные -> Выполнить (или нажмите сочетание клавиш Win+R), введите команду regedit и нажмите кнопку «ОК». Перейдите по пути HKEY_LOCAL_MACHINESYSTEMCurrentControlSetEnumDISPLAY ID монитора Device Parameters, в этом подкаталоге находится единственный параметр EDID, с типом данных REG_BINARY. В нем хранятся необработанные двоичные данные.

      Эти данные можно просмотреть в редакторе реестра в шестнадцатеричном формате. Если вы откроете данный параметр, сделав двойной клик левой клавишей мыши по нему, то увидите с левой стороны двоичные данные, а с правой их расшифровку. Ниже представлен пример таких данных, здесь вы можете сразу увидеть серийный номер, а затем модель вашего монитора.

      На самом деле в данном параметре содержится гораздо больше информации, чем отображает редактор реестра.

      Для просмотра полной информации о подключенных к вашему компьютеру мониторов вы можете воспользоваться программой Monitor Asset Manager (ссылка на оф. сайт http://www.entechtaiwan.com/util/moninfo.shtm).

Дополнительную информацию о формате данных EDID вы можете посмотреть по ссылке http://en.wikipedia.org/wiki/EDID.

      В данной инструкции будет описан способ получения из реестра серийного номера и модели активного (подключенного в данный момент) монитора. Создайте проект Windows Form в Microsoft Visual Studio. Нажмите клавишу «F7» и перейдите в листинг главной формы. Добавьте приведенный ниже метод:

private void MonitorInfo()
{
Microsoft.Win32.RegistryKey Display = Microsoft.Win32.Registry.LocalMachine;
Boolean bFailed = false;
try
{
Display = Registry.LocalMachine.OpenSubKey(@"SYSTEMCurrentControlSetEnumDISPLAY");
}
catch
{
bFailed = true;
}

if (!bFailed & (Display != null))
{
foreach (string sMonitorID in Display.GetSubKeyNames())
{
RegistryKey MonitorID = Display.OpenSubKey(sMonitorID);

if (MonitorID != null)
{
foreach (string sPNPID in MonitorID.GetSubKeyNames())
{
RegistryKey PnPID = MonitorID.OpenSubKey(sPNPID);
if (PnPID != null)
{
string[] sSubkeys = PnPID.GetSubKeyNames();

if (sSubkeys.Contains("Control"))
{
if (sSubkeys.Contains("Device Parameters"))
{
RegistryKey DevParam =
PnPID.OpenSubKey("Device Parameters");
string sSerial = "";
string sModel = "";

string sSerFind =
new string(new char[] {
(char)00,
(char)00,
(char)00,
(char)0xff });
string sModFind =
new string(new char[] {
(char)00,
(char)00,
(char)00,
(char)0xfc });
byte[] bObj = DevParam.GetValue("EDID", null) as byte[];
if (bObj != null)
{
string[] sDescriptor = new string[4];
Encoding ANSI = Encoding.GetEncoding(1252);
sDescriptor[0] = ANSI.GetString(bObj, 0x36, 18);
sDescriptor[1] = ANSI.GetString(bObj, 0x48, 18);
sDescriptor[2] = ANSI.GetString(bObj, 0x5A, 18);
sDescriptor[3] = ANSI.GetString(bObj, 0x6C, 18);

//Search the Keys
foreach (string sDesc in sDescriptor)
{
if (sDesc.Contains(sSerFind))
{
sSerial =
sDesc.Substring(4).Replace("","").Trim();
}
if (sDesc.Contains(sModFind))
{
sModel =
sDesc.Substring(4).Replace("","").Trim();
}
}
}
if (!string.IsNullOrEmpty(sPNPID + sSerFind + sModel + sMonitorID))
{
MessageBox.Show(
"Модель: " + sModel
+ Environment.NewLine +
"Серийный номер: " + sSerial);
}
}
}
}
}
}
}
}
}

      Для вызова этого метода добавьте на форму компонент «Button» и сделайте двойной клик по нему, вы перейдите в автоматический метод button1_Click. Добавьте в него вызов метода «MonitorInfo();».

      Запустите приложение, нажав на клавиатуре клавишу «F5». Нажмите на единственную кнопку на вашего приложения. Если вы все сделали правильно, то у вас появится диалоговое окно с моделью и серийным номером вашего монитора, в случае если мониторов несколько, то сообщений будет столько же.

Ссылка для скачивания примера: Яндекс.Диск

ЧИТАТЬ ТАКЖЕ:  Плавное появление формы: Справочник по C#

Дополнительные материалы: Яндекс.Диск

Получение модели и серийного номера монитора из Extended Display Identification Data (EDID) : Справочник по C#

0.00 (0%) 0 votes

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь