C# 直接从监视器读取EDID无驱动程序

C# 直接从监视器读取EDID无驱动程序,c#,edid,winpe,wmi,windows,C#,Edid,Winpe,Wmi,Windows,我得到了这个项目,我试图直接从监视器中提取数据。 目标是使应用程序可以在没有安装任何驱动程序的情况下运行。 我知道可以通过注册数据库或获取信息,但在本项目中这是不可能的,因为如果没有安装驱动程序,它将无法提供正确的信息。我们有这个附加的代码可以工作,但我想它会询问驱动程序的解决方案,因为当我们尝试安装时,它不会工作。 下面是安装驱动程序时可以显示分辨率的代码 [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] pri

我得到了这个项目,我试图直接从监视器中提取数据。 目标是使应用程序可以在没有安装任何驱动程序的情况下运行。 我知道可以通过注册数据库或获取信息,但在本项目中这是不可能的,因为如果没有安装驱动程序,它将无法提供正确的信息。我们有这个附加的代码可以工作,但我想它会询问驱动程序的解决方案,因为当我们尝试安装时,它不会工作。 下面是安装驱动程序时可以显示分辨率的代码

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool EnumDisplaySettings([MarshalAs(UnmanagedType.LPStr)] string lpszDeviceName, int iModeNum, out Program.DEVMODE lpDevMode);
public static List<Tuple<int, int>> GetScreenResolutions()
{
    List<Tuple<int, int>> list = new List<Tuple<int, int>>();
    try
    {
        int num = 0;
        Program.DEVMODE dEVMODE;
        while (Program.EnumDisplaySettings(null, num++, out dEVMODE))
        {
            Tuple<int, int> item = Tuple.Create<int, int>(dEVMODE.dmPelsWidth, dEVMODE.dmPelsHeight);
            if (!list.Contains(item))
            {
                list.Add(item);
            }
        }
    }
    catch
    {
        Console.WriteLine("Could not get screen resolutions.");
    }
    return list;
}
[DllImport(“user32.dll”)]
[返回:Marshallas(UnmanagedType.Bool)]
私有静态外部bool EnumDisplaySettings([Marshallas(UnmanagedType.LPStr)]字符串lpszDeviceName,int iModeNum,out Program.DEVMODE lpDevMode);
公共静态列表GetScreenResolutions()
{
列表=新列表();
尝试
{
int num=0;
Program.DEVMODE DEVMODE;
while(Program.EnumDisplaySettings(null、num++、out dEVMODE))
{
Tuple item=Tuple.Create(dEVMODE.dmPelsWidth,dEVMODE.dmpelshight);
如果(!list.Contains(项))
{
列表。添加(项目);
}
}
}
抓住
{
Console.WriteLine(“无法获取屏幕分辨率”);
}
退货清单;
}

您可能需要p/调用。但是,我还没有在winpe上测试链接中的代码。

据我所知,您的示例使用注册表读取EDID,我已经尝试了,但没有成功。您自己搜索注册表了吗?确切的注册表路径因系统而异,SetupAPI是检索正确路径的官方方法。我确实使用SetupAPI查找注册表路径,但是在处理WinPE时,您无法从注册表中获得任何有用的信息,因为驱动程序没有提供任何信息。在这里跳上一个旧对话-我可以使用pinvoke使您的安装api代码在c#中工作,但我只能获得监视器的尺寸。关于如何用C++或C++来解释EDID字节数组有什么指导?我对位转换的理解不够,无法理解官方的EDID文档