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

タイトル 配列を使った記述の簡素化
投稿日: 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

といった、値が入っていない文字列が出力されます。
(ステートメント内でオブジェクトとして振舞っていない?)

よろしくご教授 願います。

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

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