ここではVB.NETのScreenクラスを使って、ディスプレイの解像度を取得する方法について紹介します。

Screenクラスとは

System.Windows.Forms.Screen クラスは、Windows のディスプレイ(モニター)情報を取得するための .NET 標準クラスです。解像度・作業領域・デバイス名・プライマリかどうかなどを取得できます。

主なScreenのプロパティ
・AllScreens — 接続されているすべてのディスプレイの配列を取得する
・PrimaryScreen — プライマリ(メイン)ディスプレイを取得する
・Bounds(Rectangle) — モニターの左上座標・幅・高さ(解像度)を取得する
・WorkingArea(Rectangle) — タスクバーなどを除いた実際の作業領域を取得する
・DeviceName(String) — ディスプレイのデバイス名を取得する
・Primary(Boolean) — その Screen がプライマリモニターかどうか判定する

プライマリディスプレイの解像度を取得する

以下は PrimaryScreen プロパティを使って、プライマリ(メイン)ディスプレイの解像度を取得するコードです。

Dim screenWidth As Integer = Screen.PrimaryScreen.Bounds.Width
Dim screenHeight As Integer = Screen.PrimaryScreen.Bounds.Height

Debug.Print("画面の解像度: " & screenWidth & " x " & screenHeight)

実行結果

画面の解像度: 1920 x 1080



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

以下は AllScreens プロパティと DeviceName プロパティを使って、すべてのディスプレイのデバイス名と解像度を取得するコードです。

For Each scr As Screen In Screen.AllScreens
    Console.WriteLine("スクリーン: " & scr.DeviceName)
    Console.WriteLine("解像度: " & scr.Bounds.Width & " x " & scr.Bounds.Height)
Next

実行結果

スクリーン: \\.\DISPLAY1
解像度: 1920 x 1080
スクリーン: \\.\DISPLAY2
解像度: 2560 x 1440



タスクバーを除いた作業領域を取得する

以下は WorkingArea プロパティを使って、プライマリ(メイン)ディスプレイのタスクバーを除いた作業領域を取得するコードです。

Dim workArea As Rectangle = Screen.PrimaryScreen.WorkingArea

Debug.Print("作業領域:")
Debug.Print("X: " & workArea.X)
Debug.Print("Y: " & workArea.Y)
Debug.Print("Width: " & workArea.Width)
Debug.Print("Height: " & workArea.Height)

実行結果

作業領域:
X: 0
Y: 0
Width: 1920
Height: 1020



プライマリディスプレイか判定する

以下は Primary プロパティを使って、プライマリ(メイン)ディスプレイか判定するコードです。

For Each scr As Screen In Screen.AllScreens
    Debug.Print("デバイス名: " & scr.DeviceName)

    If scr.Primary Then
        Debug.Print("→ このモニターはプライマリです")
    Else
        Debug.Print("→ このモニターはセカンダリです")
    End If
Next

実行結果

デバイス名: \\.\DISPLAY1
→ このモニターはプライマリです
デバイス名: \\.\DISPLAY2
→ このモニターはセカンダリです



以上、VB.NETのScreenクラスを使って、ディスプレイの解像度を取得する方法について解説しました。