tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^2: 配列を使った記述の簡素化
投稿日: 2016/03/08(Tue) 11:23
投稿者食う寝る走る
魔界の仮面弁士 さま アドバイスありがとうございます。
教えていただいたUsing ブロックによるインスタンス作成コードで無事、簡素化が出来ました。
参照元のサンプルコードを確認したら、ご指摘のようにScriptの説明サイトでした。
先に作った、CPU,BIOS,HDD等の情報取得コードにも展開して修正したいと思います。

以下、まとめとして コードを貼っておきます。

'------------------------------------------------------------------------------------------
'(質問1)「obj.Manufacturer」を obj.str みなく書けないだろうか?

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
  Dim PMSet As Object
        Dim Str() As String = {"BankLabel", "Capacity", "Caption", "CreationClassName", "DataWidth", "Description", "DeviceLocator",
"FormFactor", "HotSwappable", "InstallDate", "InterleaveDataDepth", "InterleavePosition", "Manufacturer", "MemoryType", "Model",
"Name", "OtherIdentifyingInfo", "PartNumber", "PositionInRow", "PoweredOn", "Removable", "Replaceable", "SerialNumber", "SKU",
"Speed", "Status", "Tag", "TotalWidth", "TypeDetail", "Version"}

        For Each i In Str
            PMSet = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("SELECT " & i & " FROM Win32_PhysicalMemory")
            For Each obj In PMSet
                Console.WriteLine("Win32_PhysicalMemory." & i & "=" & obj.Properties_(i).Value)
        Next obj, i
    End Sub
'------------------------------------------------------------------------------------------


'------------------------------------------------------------------------------------------
'(質問2)その他もろもろの、プロパティで情報取得するのに同じように長々と記述すればいいのですが、
'  下記のような配列記述で短くまとめることはできないでしょうか?

    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        'Imports System.Management
        Dim Str() As String = {"BankLabel", "Capacity", "Caption", "CreationClassName", "DataWidth", "Description", "DeviceLocator",
"FormFactor", "HotSwappable", "InstallDate", "InterleaveDataDepth", "InterleavePosition", "Manufacturer", "MemoryType", "Model",
"Name", "OtherIdentifyingInfo", "PartNumber", "PositionInRow", "PoweredOn", "Removable", "Replaceable", "SerialNumber", "SKU",
"Speed", "Status", "Tag", "TotalWidth", "TypeDetail", "Version"}

        Using mc As New ManagementClass("Win32_PhysicalMemory")
            For Each i In Str
                For Each p In mc.GetInstances()
                    'Console.WriteLine($"Win32_PhysicalMemory.{str}={p(str)}")
                    Console.WriteLine($"Win32_PhysicalMemory.{i}={p(i)}")
                    p.Dispose()
            Next p, i
        End Using
    End Sub
'------------------------------------------------------------------------------------------

ありがとうございました。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。