DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

ディスプレイの大きさ(画面の領域、解像度)を取得する

プライマリディスプレイの大きさを取得する

ディスプレイが一台のとき(あるいはプライマリディスプレイを対象とするとき)は、Screen.PrimaryScreenプロパティにより、ディスプレイの大きさ(範囲、領域)をピクセル単位で取得できます。

VB.NET
コードを隠すコードを選択
'ディスプレイの高さ
Dim h As Integer = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height
'ディスプレイの幅
Dim w As Integer = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width

'結果表示
Console.WriteLine("ディスプレイの高さ:{0}ピクセル", h)
Console.WriteLine("ディスプレイの幅:{0}ピクセル", w)
C#
コードを隠すコードを選択
//ディスプレイの高さ
int h = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height;
//ディスプレイの幅
int w = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width;

//結果表示
Console.WriteLine("ディスプレイの高さ:{0}ピクセル", h);
Console.WriteLine("ディスプレイの幅:{0}ピクセル", w);
補足:.NET Framework 2.0以降のVB.NETでは、My.Computer.ScreenプロパティでSystem.Windows.Forms.Screen.PrimaryScreenと同じことができます。

すべてのディスプレイを取得する

ディスプレイが複数ある場合は、Screen.AllScreensプロパティを使ってすべてのディスプレイを取得することができます。

すべてのディスプレイのデバイス名と範囲(左上の座標と、大きさ)を列挙する例を以下に示します。

VB.NET
コードを隠すコードを選択
'すべてのディスプレイを列挙する
Dim s As System.Windows.Forms.Screen
For Each s In System.Windows.Forms.Screen.AllScreens
    'ディスプレイのデバイス名を表示
    Console.WriteLine("デバイス名:{0}", s.DeviceName)
    'ディスプレイの左上の座標を表示
    Console.WriteLine("X:{0} Y:{1}", s.Bounds.X, s.Bounds.Y)
    'ディスプレイの大きさを表示
    Console.WriteLine("高さ:{0} 幅:{1}", s.Bounds.Height, s.Bounds.Width)
Next
C#
コードを隠すコードを選択
//すべてのディスプレイを列挙する
foreach (System.Windows.Forms.Screen s in System.Windows.Forms.Screen.AllScreens)
{
    //ディスプレイのデバイス名を表示
    Console.WriteLine("デバイス名:{0}", s.DeviceName);
    //ディスプレイの左上の座標を表示
    Console.WriteLine("X:{0} Y:{1}", s.Bounds.X, s.Bounds.Y);
    //ディスプレイの大きさを表示
    Console.WriteLine("高さ:{0} 幅:{1}", s.Bounds.Height, s.Bounds.Width);
}

フォームのあるディスプレイの大きさを取得する

指定したフォームを保持しているディスプレイを取得するには、Screen.FromControlメソッドを使います。このメソッドは、指定されたコントロールの最大部分を保持するディスプレイを表すScreenオブジェクトを返します。コントロールがどのディスプレイにも保持されていない場合は、一番近いディスプレイが返されます。

以下の例では、自分自身のフォームがあるディスプレイを取得してから、さらにその大きさを取得しています。

VB.NET
コードを隠すコードを選択
'現在フォームが存在しているディスプレイを取得
Dim s As System.Windows.Forms.Screen = _
    System.Windows.Forms.Screen.FromControl(Me)
'ディスプレイの高さと幅を取得
Dim h As Integer = s.Bounds.Height
Dim w As Integer = s.Bounds.Width
C#
コードを隠すコードを選択
//現在フォームが存在しているディスプレイを取得
System.Windows.Forms.Screen s =
    System.Windows.Forms.Screen.FromControl(this);
//ディスプレイの高さと幅を取得
int h = s.Bounds.Height;
int w = s.Bounds.Width;

フォームのあるディスプレイの大きさを取得するだけであれば、Screen.GetBoundsメソッドを使用することもできます。

以下の例では、上の例と全く同じことをしています。

VB.NET
コードを隠すコードを選択
'現在フォームが存在しているディスプレイの高さと幅を取得
Dim h As Integer = System.Windows.Forms.Screen.GetBounds(Me).Height
Dim w As Integer = System.Windows.Forms.Screen.GetBounds(Me).Width
C#
コードを隠すコードを選択
//現在フォームが存在しているディスプレイの高さと幅を取得
int h = System.Windows.Forms.Screen.GetBounds(this).Height;
int w = System.Windows.Forms.Screen.GetBounds(this).Width;

ディスプレイの作業領域を取得する

ディスプレイの作業領域を取得するには、Screen.WorkingAreaプロパティを使います。作業領域とは、MSDNによると、「ディスプレイのデスクトップ領域からタスクバー、ドッキングされたウィンドウ、およびドッキングされたツールバーを除いた部分です。」とのことです。

以下の例では、プライマリディスプレイの作業領域を取得しています。

VB.NET
コードを隠すコードを選択
'プライマリディスプレイの作業領域の高さと幅を取得
Dim h As Integer = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height
Dim w As Integer = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width
C#
コードを隠すコードを選択
//プライマリディスプレイの作業領域の高さと幅を取得
int h = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height;
int w = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width;

フォームのあるディスプレイの作業領域を取得するだけであれば、Screen.GetWorkingAreaメソッドを使うこともできます。

以下の例では、自分自身のフォームが存在しているディスプレイの作業領域を取得しています。

VB.NET
コードを隠すコードを選択
'フォームが存在しているディスプレイの作業領域の高さと幅を取得
Dim h As Integer = System.Windows.Forms.Screen.GetWorkingArea(Me).Height
Dim w As Integer = System.Windows.Forms.Screen.GetWorkingArea(Me).Width
C#
コードを隠すコードを選択
//フォームが存在しているディスプレイの作業領域の高さと幅を取得
int h = System.Windows.Forms.Screen.GetWorkingArea(this).Height;
int w = System.Windows.Forms.Screen.GetWorkingArea(this).Width;
  • 履歴:
  • 2007/2/24 My.Computer.Screenプロパティに関する記述を追加。
  • 2009/8/9 「ディスプレイの作業領域を取得する」のVB.NETのコードで変数の宣言がC#になっていたのを修正。
  • 2015/6/8 Screen.FromControlメソッドの説明を追加、Screen.AllScreensプロパティの使用例を追加など。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。