2015-02-09 27 views
1

好吧,我知道有這個問題類似的線程,但沒有人真正適合我的情況:獲取計算機推薦的分辨率代碼

如果我去我的桌面上,點擊屏幕分辨率,我有一個建議分辨率的菜單。我想從代碼(C#)得到它。

我的代碼看起來是這樣的:

public static Size GetOptimalScreenResolution() 
    { 
     var scope = new System.Management.ManagementScope(); 
     var query = new System.Management.ObjectQuery("SELECT * FROM CIM_VideoControllerResolution"); 
     UInt32 maxHResolution = 0; 
     UInt32 maxVResolution = 0; 
     using (var searcher = new System.Management.ManagementObjectSearcher(scope, query)) 
     { 
      var results = searcher.Get(); 
      foreach (var item in results) 
      { 
       if ((UInt32)item["HorizontalResolution"] > maxHResolution) 
        maxHResolution = (UInt32)item["HorizontalResolution"]; 

       if ((UInt32)item["VerticalResolution"] > maxVResolution) 
        maxVResolution = (UInt32)item["VerticalResolution"]; 
      } 
     } 
     return new Size(maxHResolution, maxVResolution); 
    } 

在我的桌面,推薦分辨率爲1680 X 1050。 什麼這個方法返回的是1680 X 1280 這意味着,推薦分辨率是沒有必要的最大的一個水平和垂直。如何獲得1680 X 1050的價值?謝謝!

+2

首先有一個(至少在邏輯電平)的問題在你上面的邏輯,你基本上假設,通過尋找最大水平和垂直分辨率_seperately_,如果一個顯示器可以支持X * Y和A * B,它也可以支持X * B和A * Y,可能並非如此... – tolanj 2015-02-09 10:07:16

+0

非常好的一點。沒有像1680 X 1280這樣的分辨率。將解決它並更新你。謝謝! – DimaK 2015-02-09 10:22:04

+0

我只想在你的循環中使用maxRes = hRes * vRes並存儲h和v。儘管如此我仍然無法看到建議的資源(這並不是說我沒有找不到正確的位置)。 – tolanj 2015-02-09 10:26:43

回答

0

溶液 - 由於tolanj

public static Size GetOptimalScreenResolution() 
    { 
     var scope = new System.Management.ManagementScope(); 
     var query = new System.Management.ObjectQuery("SELECT * FROM CIM_VideoControllerResolution"); 
     UInt32 maxHResolution = 0; 
     UInt32 maxVResolution = 0; 
     UInt32 maxHForMaxVResolution = 0; 
     using (var searcher = new System.Management.ManagementObjectSearcher(scope, query)) 
     { 
      var results = searcher.Get(); 
      foreach (var item in results) 
      { 
       if ((UInt32) item["HorizontalResolution"] >= maxHResolution) 
       { 
        maxHResolution = (UInt32) item["HorizontalResolution"]; 
        if ((UInt32)item["VerticalResolution"] > maxVResolution || maxHForMaxVResolution != maxHResolution) 
        { 
         maxVResolution = (UInt32)item["VerticalResolution"]; 
         maxHForMaxVResolution = (UInt32)item["HorizontalResolution"]; 
        } 
       } 
      } 
     } 
     return new Size(maxHResolution, maxVResolution); 
    }