タイトル | : Re^2: 配列を使った記述の簡素化 |
記事No | : 11638 |
投稿日 | : 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 '------------------------------------------------------------------------------------------
ありがとうございました。
|