最終更新日 2006 年 6 月 22 日
サンプル コードのダウンロード (vbmigtips_SystemInformation.msi, 490 KB)
※ このサンプルをインストールするには Visual Studio 2005 が必要です。
コンピュータ名やドメイン名、画面の作業領域のサイズ、メニューに表示するテキストのフォントなど、システム環境に関する情報を取得したい場合があると思います。そこで今回は、システム環境に関する情報を取得する方法について紹介します。
現在のシステム環境の情報を取得する場合、Visual Basic 6.0 では、Win32API を使用します。取得するシステム環境情報に応じて、使用する関数も異なりました。一方、Visual Basic .NET 以降では、SystemInformation クラスを使用します。これにより、様々な情報を簡単に取得することができるようになりました。今回は、ComobBox のリストに SystemInformation クラスのプロパティ名の一覧を追加します。一覧から取得したい情報項目 (プロパティ名) を選択すると、下部の TextBox に指定したシステム環境に関する情報が表示されるアプリケーション (図1) を作成します。
図1
まず、SystemInformation クラスのプロパティ名を取得し、ComboBox のリストに追加します。SystemInformation クラスのプロパティ名を取得するには、SystemInformation クラスの Type を取得し、GetProperties メソッドで、すべてのパブリック プロパティを取得します。実装コードは以下のとおりです。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim typeSystemInformation As Type = GetType(Windows.Forms.SystemInformation)
Dim pi As PropertyInfo() = typeSystemInformation.GetProperties()
For Each prop As PropertyInfo In pi
Me.ComboBox1.Items.Add(prop.Name)
Next
End Sub
リスト1
上記 (リスト1) の「Dim typeSystemInformation As Type = GetType(Windows.Forms.SystemInformation)」で、インスタンスの Type を取得し、「Dim pi As PropertyInfo() = typeSystemInformation.GetProperties()」で、SystemInformation クラスでサポートされている、すべてのパブリック プロパティを取得します。「Me.ComboBox1.Items.Add(prop.Name)」で、変数 pi に格納されたパブリック プロパティを ComobBox のリストに追加していきます。これにより、図2 のように ComobBox のリストに SystemInformation クラスのプロパティ名の一覧が表示されます。
図2
次に、図2 の一覧から取得したい情報項目 (プロパティ名) の情報を取得し、下部の TextBox に表示します。GetProperty メソッドを使用して指定したプロパティを取得し、GetValue メソッドでプロパティの値を取得します。実装コードは以下のとおりです。
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
TextBox1.Clear()
Dim strName As String = Me.ComboBox1.SelectedItem.ToString
Dim typeSystemInformation As Type = GetType(Windows.Forms.SystemInformation)
Dim pi As PropertyInfo = typeSystemInformation.GetProperty(strName)
Dim strPropval As String
strPropval = pi.GetValue(Nothing, Nothing).ToString
Dim strOldChar() As String = New String() {"{", "}", "[", "]", " "}
Dim i As Integer
For i = 0 To strOldChar.Length - 1
strPropval = strPropval.Replace(strOldChar(i), "")
Next
Dim propvals() As String = strPropval.Split(",")
For Each prop As String In propvals
If TextBox1.Text = "" Then
TextBox1.Text = prop.ToString
Else
TextBox1.Text = TextBox1.Text + vbCrLf + prop.ToString
End If
Next
End Sub リスト2
上記 (リスト2) の「Dim typeSystemInformation As Type = GetType(Windows.Forms.SystemInformation)」で、インスタンスの Type を取得し、「Dim pi As PropertyInfo = typeSystemInformation.GetProperty(strName)」で、指定したプロパティを取得します。そして、「strPropval = pi.GetValue(Nothing, Nothing).ToString」で指定したプロパティの値を取得します。
リスト2 の「Dim strOldChar() As String = New String() {"{", "}", "[", "]", " "}」以降では、GetValue メソッドによって取得したプロパティ値をより見やすく、綺麗に TextBox に表示するため、括弧や空白などを省き、必要に応じて改行などを行う処理を行っています。
上記を実装し、図2 のリストから取得したい情報項目 (プロパティ名) を選択すると、下部の TextBox に指定したシステム環境に関する情報が表示されます。たとえば、図2 のリストから「MenuFont」を選択すると、図1 のように、メニューに表示するテキストのフォントを取得し、TextBox に表示されます。
このように、SystemInformation クラスを使用することでシステム環境に関する様々な情報を取得することができます。また、Visual Basic 2005 では、My 機能が新たにサポートされてことにより、SystemInformation クラスを使用せずに、システムに関する多くの情報を取得することができます。しかし、My 機能は、.NET Framework でよく使われるクラスや機能へのエントリ ポイントのみ提供されているため、SystemInformation クラスによって取得可能なすべての情報を取得することはできません。