Как мне узнать настоящее имя монитора? как видно в диалоговом окне разрешения

Я пытаюсь получить понятное имя для мониторов в моей системе. Я использую C #.

Я пробовал Screen , который дает мне только //./ DisplayXX . Я также пробовал как Win32_DesktopMonitor , так и EnumDisplayDevices , все они дают мне варианты //./ DisplayXX ИЛИ Generic Monitor , тогда как я Знайте, что имена моих дисплеев - SyncMaster и SM2333T .

Теперь Windows знает, что это за мониторы, отображает их в окнах Устройства и принтеры с правильными именами , а также в диалоговом окне настройки местоположения и разрешения.

Где взять эти имена? Я поискал в реестре и не нашел их, У меня возникла проблема при вызове EnumDisplayDevices во второй раз, когда я снова устанавливал iDevNum на идентификатор, что означало, что я пытался получить данные из неправильного места, затем я заменил это на 0 , и он отлично работает, см. код ниже.

    var device = new DISPLAY_DEVICE();
    device.cb = Marshal.SizeOf(device);
    try
    {
        for (uint id = 0; EnumDisplayDevices(null, id, ref device, 0); id++)
        { 
                Console.WriteLine(String.Format("{0}, {1}, {2}, {3}, {4}, {5}", id, device.DeviceName, device.DeviceString, device.StateFlags, device.DeviceID, device.DeviceKey));
                Console.WriteLine();
                device.cb = Marshal.SizeOf(device);

                EnumDisplayDevices(device.DeviceName, 0, ref device, 0);

                Console.WriteLine(String.Format("{0}, {1}, {2}, {3}, {4}, {5}", id, device.DeviceName, device.DeviceString, device.StateFlags, device.DeviceID, device.DeviceKey));
                device.cb = Marshal.SizeOf(device);

                device.cb = Marshal.SizeOf(device);
                return;
            }

        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(String.Format("{0}", ex.ToString()));
    }
15
задан JamesStuddart 11 February 2011 в 13:56
поделиться