C#で画面の解像度を取得する

画面の解像度を取得したい場合、System.Windows.Forms.Screenクラスを使う。

複数のモニタを使っている場合でも全てのモニタの解像度を取得する事が出来る。

 

※WPFのライブラリには画面解像度を取得するクラスが見当たらないので、Windowsフォームのクラスを利用する

 

C++の場合はこちら↓

C++で画面の解像度を取得する

以下のような情報を取得できる。

BitsPerPixel ・・・ 1ピクセル当たりのビット数

Bounds       ・・・ ディスプレイの範囲

           メインディスプレイの左上が(0,0)になる

           サブのディスプレイを左側に配置してたりするとxはマイナスになる

DeviceName ・・・ デバイス名

Primary        ・・・ メインディスプレイの場合true

WorkingArea ・・・ タスクバーを除いた画面の範囲

メインディスプレイの解像度を取得する


モニタを複数つないでいるときはタスクバーがある画面がメイン。

[コントロールパネル]→[ディスプレイ]→[画面の解像度]でメインのディスプレイを確認できる。

 

System.Windows.Forms.Screenクラスのstaticなプロパティ「PrimaryScreen」で取得できる。 

            var screen = System.Windows.Forms.Screen.PrimaryScreen;
            int width  = screen.Bounds.Width;
            int height = screen.Bounds.Height;

全てのディスプレイの解像度を取得する


複数つないでいるモニタ全ての情報を取得するには

System.Windows.Forms.Screenクラスのstaticなプロパティ「AllScreens」を使う。 

            foreach (var screen in System.Windows.Forms.Screen.AllScreens)
            {
                int width  = screen.Bounds.Width;
                int height = screen.Bounds.Height;
            }

自身のウィンドウがあるディスプレイの解像度を取得


自身のアプリのウィンドウやフォームが表示されているディスプレイの情報を取得するには、

System.Windows.Forms.ScreenクラスのFrom????メソッドを使う。

 

 

Windowフォームの場合

FromControlメソッドを使い引数に自身のフォームを渡す。

var screen = System.Windows.Forms.Screen.FromControl(this);
int width  = screen.Bounds.Width;
int height = screen.Bounds.Height;

 

 

WPFの場合

FromRectangleメソッドを使い引数に自身のWindowの矩形を渡す。

            var rect = new System.Drawing.Rectangle((int)this.Left, (int)this.Top, (int)this.Width, (int)this.Height);
            var screen = System.Windows.Forms.Screen.FromRectangle(rect);
            int width  = screen.Bounds.Width;
            int height = screen.Bounds.Height;