2017-07-27 6 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

'「メイン」の表示名を「メイン」に置き換えても、何も戻ってこない。「この文が何を意味するのかはっきりしない。 'ヌル'とは何ですか? – mjwills

+0

動作するコードではなく動作するコードを送信してください。また、あなたが何をやっているのか本当に分かっていない限り、マルチディスプレイシステムを扱っているときは、表示名は必須です。私は、アプリケーションがGUIアプリケーションである場合にのみ動作すると考えています。これは、現在のスレッドのUIが表示されているディスプレイと関係しているためです。コンソールアプリケーションには適用されません。独自のGUIを所有しています。 – Luaan

+0

ああ、いいえ、私は 'null'で試してみましたが、少なくともWindows 7(どのWindowsを使っていますか?アプリケーションを起動していますか? EnumDisplaySettings( "null"、i、ref vDevMode) 'ではなく、' EnumDisplaySettings(null、i、ref vDevMode) 'を使用していますか? – Luaan

答えて

0

問題はシステム構成でした。

画面が閉じたラップトップと2台の外付けモニターを使用していました。 画面を開いたときに動作し始めました。 私はそれが私の家(デスクトップ)システムで期待どおりに働いたので、ハードウェアの問題だと思います。

関連する問題