パソコンに接続しているディスプレイ情報をボタン一つで取得する【C#】

# 動機

今回はノートパソコンに接続したディスプレイの情報をボタン一つで取得したいと思い、プロトを作成してみました。

なお、今回は WindowsFormsApp で作成しました。

# 過去の記事（WpfApp で作成）

> 参考 1：[ノートパソコンの画面の明るさをボタン一つで変更する【C#】](https://qiita.com/kewpie134134/items/d81461aab1ab1b9a26af)
> 参考 2：[ノートパソコンの画面の音量をボタン一つで変更する【C#】](https://qiita.com/kewpie134134/items/22acfa606071fbc22018#mainwindowxamlcs)
> 参考 3：[ノートパソコンの画面のバッテリー状況をボタン一つで取得する【C#】](https://qiita.com/kewpie134134/items/744d52aea14662732c6c)
> 参考 4：[ノートパソコンの画面の通信料状況をボタン一つで取得する【C#】](https://qiita.com/kewpie134134/items/8b1f7e709a1483b84cf0)
> 参考 5：[ノートパソコンで現在使用中のアプリをボタン一つで把握する【C#】](https://qiita.com/kewpie134134/items/bb9fc6d2efd03237e31f)
> 参考 6： [ノートパソコンで現在使用中のオーディオ機器情報をボタン一つで取得する【C#】](https://qiita.com/kewpie134134/items/c3e0c22f3d3e29dedd1a)
> 参考 7：[ノートパソコンのユーザー情報取得やアプリ起動・終了、ディスプレイ画面の切替などを、ボタンを作って動かす【C#】](https://qiita.com/kewpie134134/items/d70feef6319949120389)

# イメージ画像

プロトタイプのため、相変わらず UI はあまりこだわっていません。

![ディスプレイ情報取得メイン画面.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407150/99d6308d-d4d3-793f-b340-3d68d677baaf.png)

今回は「ディスプレイ情報取得」ボタンを選択することで、「プライマリディスプレイの情報取得」、「本フォームがあるディスプレイの常陽取得」、「全てのディスプレイの情報取得」ができます。

![ディスプレイ情報取得結果画面.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407150/c9647b05-a320-a66e-a973-287ee310246a.png)


# ソース

## Form1.Designer.cs

```Form1.Designer.cs

namespace WindowsFormsApp2
{
    partial class Form1
    {
        /// <summary>
        /// 必要なデザイナー変数です。
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// 使用中のリソースをすべてクリーンアップします。
        /// </summary>
        /// <param name="disposing">マネージド リソースを破棄する場合は true を指定し、その他の場合は false を指定します。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows フォーム デザイナーで生成されたコード

        /// <summary>
        /// デザイナー サポートに必要なメソッドです。このメソッドの内容を
        /// コード エディターで変更しないでください。
        /// </summary>
        private void InitializeComponent()
        {
            this.button1 = new System.Windows.Forms.Button();
            this.SuspendLayout();
            //
            // button1
            //
            this.button1.Font = new System.Drawing.Font("MS UI Gothic", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128)));
            this.button1.Location = new System.Drawing.Point(254, 142);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(301, 152);
            this.button1.TabIndex = 0;
            this.button1.Text = "ディスプレイ情報取得";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.button1_Click);
            //
            // Form1
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(800, 450);
            this.Controls.Add(this.button1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);

        }

        #endregion

        private System.Windows.Forms.Button button1;
    }
}
```

## Form1.cs

```Form1.cs
using System;
using System.Windows.Forms;

namespace WindowsFormsApp2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            try
            {
                InitializeComponent();

            }
            catch
            {
            }
        }
        /// <summary>
        /// プライマリディスプレイの情報取得
        /// </summary>
        private String GetPrimaryDisplayInformation()
        {
            String displayTitle = "";
            String deviceName = "";
            String displayX = "";
            String displayWidthSize = "";
            String displayWorkingAria = "";
            String displayWorkingAriaWidth = "";

            try
            {
                displayTitle = "●プライマリディスプレイの情報取得";
                deviceName = "\nデバイス名 : " + System.Windows.Forms.Screen.PrimaryScreen.DeviceName;
                displayX = "\nディスプレイの位置 : X=" + System.Windows.Forms.Screen.PrimaryScreen.Bounds.X + " - Y=" + System.Windows.Forms.Screen.PrimaryScreen.Bounds.Y;
                displayWidthSize = "\nディスプレイのサイズ : 幅=" + System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width + " - 高さ=" + System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height;
                displayWorkingAria = "\nディスプレイの作業領域の位置 : X" + System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.X + " - Y=" + System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Y;
                displayWorkingAriaWidth = "\nディスプレイの作業領域のサイズ : 幅" + System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width + " - 高さ=" + System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height;
            }
            catch
            {
            }
            return displayTitle + deviceName + displayX + displayWidthSize + displayWorkingAria + displayWorkingAriaWidth;
        }

        /// <summary>
        /// フォームがあるディスプレイの情報取得
        /// </summary>
        private String GetFormDisplayInformation()
        {
            String displayFormTitle = "";
            String displayDeviceName = "";
            String displayBoundsX = "";
            String displayBoundsWidth = "";
            String displayWorkingAriaX = "";
            String displayWorkingAreaWidth = "";

            try
            {
                displayFormTitle = "\n-----\n●フォームがあるディスプレイの情報取得";
                displayDeviceName = "\nデバイス名 : " + System.Windows.Forms.Screen.FromControl(this).DeviceName;
                displayBoundsX = "\nディスプレイの位置 : X=" + System.Windows.Forms.Screen.FromControl(this).Bounds.X + " - Y=" + System.Windows.Forms.Screen.FromControl(this).Bounds.Y;
                displayBoundsWidth = "\nディスプレイのサイズ : 幅=" + System.Windows.Forms.Screen.FromControl(this).Bounds.Width + " - 高さ=" + System.Windows.Forms.Screen.FromControl(this).Bounds.Height;
                displayWorkingAriaX = "\nディスプレイの作業領域の位置 : X" + System.Windows.Forms.Screen.FromControl(this).WorkingArea.X + " - Y=" + System.Windows.Forms.Screen.FromControl(this).WorkingArea.Y;
                displayWorkingAreaWidth = "\nディスプレイの作業領域のサイズ : 幅" + System.Windows.Forms.Screen.FromControl(this).WorkingArea.Width + " - 高さ=" + System.Windows.Forms.Screen.FromControl(this).WorkingArea.Height;
            }
            catch
            {
            }
            return displayFormTitle + displayDeviceName + displayBoundsX + displayBoundsWidth + displayWorkingAriaX + displayWorkingAreaWidth;
        }

        /// <summary>
        /// 全てのディスプレイの情報取得
        /// </summary>
        private String GetAllDisplayInformation()
        {
            String displayMainTitle = "";
            String displayDeviceName = "";
            String displayBoundsX = "";
            String displayBoundsWidth = "";
            String displayWorkingAreaX = "";
            String displayWorkingAreaWidth = "";
            String displayEnd = "";
            String messages = "";

            try
            {
                displayMainTitle = "\n-----\n●全てのディスプレイの情報取得";
                foreach (System.Windows.Forms.Screen screen_data in System.Windows.Forms.Screen.AllScreens)
                {
                    displayDeviceName = "\nデバイス名 : " + screen_data.DeviceName;
                    displayBoundsX = "\nディスプレイの位置 : X=" + screen_data.Bounds.X + " - Y=" + screen_data.Bounds.Y;
                    displayBoundsWidth = "\nディスプレイのサイズ : 幅=" + screen_data.Bounds.Width + " - 高さ=" + screen_data.Bounds.Height;
                    displayWorkingAreaX = "\nディスプレイの作業領域の位置 : X" + screen_data.WorkingArea.X + " - Y=" + screen_data.WorkingArea.Y;
                    displayWorkingAreaWidth = "\nディスプレイの作業領域のサイズ : 幅" + screen_data.WorkingArea.Width + " - 高さ=" + screen_data.WorkingArea.Height;
                    displayEnd = "\n-----";

                    messages += displayDeviceName + displayBoundsX + displayBoundsWidth + displayWorkingAreaX + displayWorkingAreaWidth + displayEnd;

                }
            }
            catch
            {
            }
            return displayMainTitle + messages;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show(GetPrimaryDisplayInformation() + GetFormDisplayInformation() + GetAllDisplayInformation());
        }
    }
}
```

# おわりに

今回もボタン一つでパソコン回りの情報を取得することができました。

こんな感じでまたパソコンを便利にするツールを作成したいと思います。