タイトル : 配列を使った記述の簡素化 投稿日 : 2016/03/07(Mon) 18:06 投稿者 : 食う寝る走る
開発プログラムを決まった登録PCでしか動かせなくする意味で、搭載している物理メモリの情報を取得する方法を考えております。 開発環境 OS:Windows7(32bit)プロフェッショナル IDE:VS2015 コミュニティ(VB.net) 'System.Management 参照 必要 '=== PhysicalMemory内部情報取得=============================================================== '物理メモリが複数枚あれば、複数行表示されます。 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim PMSet As Object Dim str As String str = "Manufacturer" PMSet = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("SELECT " & str & " FROM Win32_PhysicalMemory") For Each obj In PMSet Console.WriteLine("Win32_PhysicalMemory." & str & "=" & obj.Manufacturer) Next End Sub '=============================================================================================== 上記では、Win32_PhysicalMemoryクラスのManufacturerプロパティで製造メーカの取得は出来ました。 (質問1)「obj.Manufacturer」を obj.str みなく書けないだろうか? (質問2)その他もろもろの、プロパティで情報取得するのに同じように長々と記述すればいいのですが、 下記のような配列記述で短くまとめることはできないでしょうか? '=============================================================================================== Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.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 i = 0 To UBound(Str) '配列の要素数の上限まで繰り返す PMSet = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("SELECT " & Str(i) & " FROM Win32_PhysicalMemory") For Each obj In PMSet Console.WriteLine(String.Format("Win32_PhysicalMemory.{0}=obj.{0}", Str(i))) Next obj Next i End Sub '=============================================================================================== 上記では、 Console.WriteLine(String.Format("Win32_PhysicalMemory.{0}=obj.{0}", Str(i))) ステートメントに問題があり、obj.{0}に結果が出てこないで、 出力は、 Win32_PhysicalMemory.BankLabel=obj.BankLabel Win32_PhysicalMemory.Capacity=obj.Capacity Win32_PhysicalMemory.Caption=obj.Caption Win32_PhysicalMemory.CreationClassName=obj.CreationClassName といった、値が入っていない文字列が出力されます。 (ステートメント内でオブジェクトとして振舞っていない?) よろしくご教授 願います。 |