Я пытаюсь захватить дружественное имя для мониторов в моей системе. Я использую С#.
Я пробовал Screen
, который просто дает мне //./DisplayXX
. Я также пробовал как Win32_DesktopMonitor
, так и EnumDisplayDevices
, все они дают мне варианты //./DisplayXX
OR Generic Monitor
, тогда как я знаю, что мои имена отображаются SyncMaster
и SM2333T
.
Теперь Windows знает, что представляют собой эти мониторы, отображает их в окнах Устройства и принтеры с правильными именами, а также в диалоговом окне для определения местоположения и разрешения.
Где я могу взять эти имена? Я смотрел в реестре и не мог найти их, поэтому любая помощь будет большой.
РЕШЕНИЕ:
Проблема была в том, что при вызове EnumDisplayDevices
во второй раз я снова устанавливал iDevNum
в id, а это означало, что я пытался захватить данные из неправильного места, а затем заменил это на 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()));
}