2013-01-31 66 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時,您無法從註冊表獲得任何有用的信息,因爲驅動程序不提供任何信息。 –

相關問題