2017-07-27 67 views
0

我需要獲取系統上特定顯示的屏幕分辨率。 我發現這裏一個偉大的解決方案,它的偉大工程的是: How to list available video modes using C#?C#中的屏幕分辨率出現問題#

然而,當我在「空」替換顯示名稱爲「主」我得不到任何回報。

[DllImport("user32.dll")] 
    public static extern bool EnumDisplaySettings(
      string deviceName, int modeNum, ref DEVMODE devMode); 
    const int ENUM_CURRENT_SETTINGS = -1; 

    const int ENUM_REGISTRY_SETTINGS = -2; 

    [StructLayout(LayoutKind.Sequential)] 
    public 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 ScreenOrientation 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; 

    } 


static void Main(string[] args) 
    { 
    DISPLAY_DEVICE device = new DISPLAY_DEVICE(); 
     device.Size = (ushort)Marshal.SizeOf(device); 
     DEVMODE vDevMode = new DEVMODE(); 

     int i = 0; 
     while (EnumDisplaySettings(@"\\.\DISPLAY1", i, ref vDevMode)) 
     { 
      Console.WriteLine("Width:{0} Height:{1} Color:{2} Frequency:{3}", 
            vDevMode.dmPelsWidth, 
            vDevMode.dmPelsHeight, 
            1 << vDevMode.dmBitsPerPel, vDevMode.dmDisplayFrequency 
           ); 
      i++; 
     } 
    } 
+0

'當我在「Main」中將顯示名稱替換爲「null」時,我什麼也沒有回來。「我不清楚這句話的含義。什麼是'null'指的是什麼? – mjwills

+0

發佈不起作用的代碼,而不是可用的代碼。另外請注意,除非你真的知道你在做什麼,否則當你處理多顯示系統時,顯示名稱是強制性的。我認爲只有當應用程序是一個GUI應用程序時它纔可以工作,因爲它與顯示當前線程的UI的顯示有關 - 它不適用於控制檯應用程序,擁有自己的GUI。 – Luaan

+0

啊,不,我用'null'試過了,它在控制檯應用程序中也能正常工作,至少在Windows 7上(你使用的是Windows?你正在運行應用程序嗎?)。你*使用'EnumDisplaySettings(null,i,ref vDevMode)'而不是'EnumDisplaySettings(「null」,i,ref vDevMode)',對嗎? – Luaan

回答

0

問題在於系統配置。

我正在使用一臺筆記本電腦,屏幕關閉,兩個外接顯示器。 當我打開屏幕開始工作。 我認爲這也是一個硬件問題,因爲在我的家庭(桌面)系統上它按預期工作。