可以取得筆電及外接螢幕的資訊
exe執行檔下載螢幕廠商 / 型號 / 序號
WmiMonitorID
using System.Management;
static void Main()
{
var searcher = new ManagementObjectSearcher(
@"root\wmi",
"SELECT * FROM WmiMonitorID");
foreach (ManagementObject obj in searcher.Get())
{
Console.WriteLine("===== Monitor =====");
Console.WriteLine("Manufacturer : " + Decode(obj["ManufacturerName"]));
Console.WriteLine("Product Code : " + Decode(obj["ProductCodeID"]));
Console.WriteLine("Serial Number: " + Decode(obj["SerialNumberID"]));
Console.WriteLine("User Friendly: " + Decode(obj["UserFriendlyName"]));
Console.WriteLine(obj["InstanceName"]?.ToString());
}
}
static string Decode(object value)
{
if (value == null) return "";
byte[] bytes = (byte[])value;
return Encoding.ASCII.GetString(bytes).TrimEnd('\0');
}
螢幕實體尺寸(公分)
WmiMonitorBasicDisplayParams
var searcher = new ManagementObjectSearcher(
@"root\wmi",
"SELECT * FROM WmiMonitorBasicDisplayParams");
foreach (ManagementObject obj in searcher.Get())
{
Console.WriteLine("Max Horizontal Size (cm): " + obj["MaxHorizontalImageSize"]);
Console.WriteLine("Max Vertical Size (cm): " + obj["MaxVerticalImageSize"]);
}
目前解析度(顯卡輸出)
Win32_VideoController
var searcher = new ManagementObjectSearcher(
"SELECT * FROM Win32_VideoController");
foreach (ManagementObject obj in searcher.Get())
{
Console.WriteLine("Name: " + obj["Name"]);
Console.WriteLine("Resolution: " +
obj["CurrentHorizontalResolution"] + " x " +
obj["CurrentVerticalResolution"]);
}
Register註冊表內所有EDID
static void Main()
{
string displayKey = @"SYSTEM\CurrentControlSet\Enum\DISPLAY";
using (RegistryKey baseKey = Registry.LocalMachine.OpenSubKey(displayKey))
{
if (baseKey == null) return;
foreach (string vendor in baseKey.GetSubKeyNames())
{
using (RegistryKey vendorKey = baseKey.OpenSubKey(vendor))
{
foreach (string deviceId in vendorKey.GetSubKeyNames())
{
using (RegistryKey deviceKey = vendorKey.OpenSubKey(deviceId + @"\Device Parameters"))
{
if (deviceKey == null) continue;
byte[] edid = deviceKey.GetValue("EDID") as byte[];
if (edid != null)
{
Console.WriteLine($"EDID for {vendor} {deviceId}, length: {edid.Length}");
Console.WriteLine(BitConverter.ToString(edid).Replace("-", " "));
}
}
}
}
}
}
}
筆電螢幕的EDID
private void button7_Click(object sender, EventArgs e)
{
int count = Screen.AllScreens.Length;
if(count < 1) return;
// Find Internal Monitor
var searcher = new ManagementObjectSearcher(
@"root\wmi",
"SELECT * FROM WmiMonitorID");
//string curmonitor = "";
string[] monitors = new string[count];
int j = 0;
foreach (ManagementObject obj in searcher.Get())
{
monitors[j++] = obj.ToString();
}
//
j = 0;
string displayKey = @"SYSTEM\CurrentControlSet\Enum\DISPLAY";
using (RegistryKey baseKey = Registry.LocalMachine.OpenSubKey(displayKey))
{
if (baseKey == null) return;
foreach(string name in monitors)
{
foreach (string vendor in baseKey.GetSubKeyNames())
{
if (monitors[j].IndexOf(vendor) < 0) continue;
using (RegistryKey vendorKey = baseKey.OpenSubKey(vendor))
{
foreach (string deviceId in vendorKey.GetSubKeyNames())
{
if(monitors[j].IndexOf(deviceId) < 0) continue;
using (RegistryKey edidKey = vendorKey.OpenSubKey(deviceId + @"\Device Parameters"))
{
if (edidKey != null)
{
byte[] edid = edidKey.GetValue("EDID") as byte[];
if (edid != null)
{
Console.WriteLine($"=== Laptop Internal Display EDID ( {vendor} {deviceId} ) ===");
Console.WriteLine($"EDID length: {edid.Length}\n");
// 每行 16 bytes,顯示位址偏移
for (int i = 0; i < edid.Length; i += 16)
{
int lineLength = Math.Min(16, edid.Length - i);
byte[] lineBytes = new byte[lineLength];
Array.Copy(edid, i, lineBytes, 0, lineLength);
// 偏移 + hex 顯示
string hexLine = BitConverter.ToString(lineBytes).Replace("-", " ");
Console.WriteLine($"{i:X4}: {hexLine}");
}
Console.WriteLine("\n");
}
}
}
}
}
}
j++;
}
}
}


留言
張貼留言