2012-04-06 47 views

回答

5

只是使用這個:

foreach (DisplayMode mode in GraphicsAdapter.DefaultAdapter.SupportedDisplayModes) { 
    //mode.whatever (and use any of avaliable information) 
} 

但它會給你很少的重複,因爲它也考慮到折射率,所以你可能會包括aswel,或做一些過濾。

3

我不是最新的XNA,但我不認爲有一個快速和簡單的功能。有一種使用舊的WinForms API的方法,但是因爲我個人不希望鏈接到其他應用程序中,最簡單的方法就是使用本機函數。

首先,定義將要使用本機結構:

[StructLayout(LayoutKind.Sequential)] 
internal struct DEVMODE 
{ 
    private const int CCHDEVICENAME = 0x20; 
    private const int CCHFORMNAME = 0x20; 
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x20)] 
    public string dmDeviceName; 
    public short dmSpecVersion; 
    public short dmDriverVersion; 
    public short dmSize; 
    public short dmDriverExtra; 
    public int dmFields; 
    public int dmPositionX; 
    public int dmPositionY; 
    public int dmDisplayOrientation; 
    public int dmDisplayFixedOutput; 
    public short dmColor; 
    public short dmDuplex; 
    public short dmYResolution; 
    public short dmTTOption; 
    public short dmCollate; 

    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x20)] 
    public string dmFormName; 

    public short dmLogPixels; 
    public int dmBitsPerPel; 
    public int dmPelsWidth; 
    public int dmPelsHeight; 
    public int dmDisplayFlags; 
    public int dmDisplayFrequency; 
    public int dmICMMethod; 
    public int dmICMIntent; 
    public int dmMediaType; 
    public int dmDitherType; 
    public int dmReserved1; 
    public int dmReserved2; 
    public int dmPanningWidth; 
    public int dmPanningHeight; 
} 

我們還需要定義兩個本地函數,我們將使用:

[DllImport("user32.dll")] 
private static extern bool EnumDisplaySettings(string lpszDeviceName, int iModeNum, ref DEVMODE lpDevMode); 

[DllImport("user32.dll")] 
private static extern int GetSystemMetrics(int nIndex); 

而在去年,我們的功能,列出所有屏幕分辨率和一個獲得當前的屏幕分辨率:

public static List<string> GetScreenResolutions() 
{ 
    var resolutions = new List<string>(); 

    try 
    { 
     var devMode = new DEVMODE(); 
     int i = 0; 

     while (EnumDisplaySettings(null, i, ref devMode)) 
     { 
      resolutions.Add(string.Format("{0}x{1}", devMode.dmPelsWidth, devMode.dmPelsHeight)); 
      i++; 
     } 

     resolutions = resolutions.Distinct(StringComparer.InvariantCulture).ToList(); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine("Could not get screen resolutions."); 
    } 

    return resolutions; 
} 

public static string GetCurrentScreenResolution() 
{ 
    int width = GetSystemMetrics(0x00); 
    int height = GetSystemMetrics(0x01); 

    return string.Format("{0}x{1}", width, height); 
} 
+1

雖然接受的答案是要走的路,+1解釋如何獨立於XNA做這樣的事情。 – 2014-05-02 22:33:36