2013-01-31 256 views
0

我得到了这个项目,我试图直接从显示器中提取。 目标是在没有安装任何驱动程序的情况下创建可在上运行的应用程序。 我知道有可能通过注册数据库或获取信息,但这在此项目中不可行,因为它不会在未安装驱动程序的情况下提供正确的信息。我们得到了这个附加的代码,但我想它会向驱动程序询问这些分辨率,因为当我们尝试安装时,它不起作用。 下面是可以显示分辨率,安装驱动程序时的代码..从显示器直接读取EDID没有驱动程序

[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; 
} 

回答

1

您可能需要的P/Invoke的native SetupAPI。虽然没有在winpe上的链接中测试代码。

+0

据我可以看到你的例子使用注册表来读取EDID,我已经试过没有成功。 –

+0

你是否自己搜索注册表?确切的注册表路径在系统之间差别很大,并且SetupAPI是正确的检索方式。 –

+0

我确实使用了SetupAPI来查找注册表路径,但是在处理WinPE时,您无法从注册表获得任何有用的信息,因为驱动程序不提供任何信息。 –

相关问题