タイトル : Re^2: 物理ドライブ(指定ドライブ)情報を取得 (解決) 投稿日 : 2016/04/22(Fri) 19:23 投稿者 : 食う寝る走る
>魔界の仮面弁士さま アドバイスありがとうございます。 > > Dim Str() As String > VB には「Str 関数」がありますよね。 > 予約語ではないにせよ、その名前は混乱の元かも。 混乱の元なので、変更いたします。 > それと、WMI は IDisposable なので、Dispose した方がベターです。 使い終わった後の処理として、了解いたしました。 > > For Each i In Str > > For Each p In mc.GetInstances() > 外側と内側のループは逆にした方がよいと思いますよ。 確かに、逆にした方が、ドライブごとの情報のまとまった羅列になり見やすくなりますね。 > ループしないならこんな感じ。 > > Using p As New ManagementObject($"Win32_LogicalDisk.DeviceId=""C:""") > p.Get() > > strMem = $"Name={p!Name} > FileSystem={p!FileSystem} > FreeSpace={p!FreeSpace} > Size={p!Size} > VolumeName={p!VolumeName} > VolumeSerialNumber={p!VolumeSerialNumber}" > > End Using > > > p("FreeSpace") とか p.Item("FreeSpace") とか > p.Properties("FreeSpace").Value でも良いですけど。 > > > > 元のコードのように ManagementObjectCollection を使うなら、WQL にする手もありますよ。 > > > Dim wql = " > SELECT > Name, FileSystem, FreeSpace, Size, > VolumeName, VolumeSerialNumber > FROM > Win32_LogicalDisk > WHERE > MediaType=12 OR MediaType IS NULL > " > > strMem = "" > Using mc = New ManagementObjectSearcher(wql), disks = mc.Get() > For Each p In disks > > strMem &= $" > Name={p!Name} > FileSystem={p!FileSystem} > FreeSpace={p!FreeSpace} > Size={p!Size} > VolumeName={p!VolumeName} > VolumeSerialNumber={p!VolumeSerialNumber} > -----" > > p.Dispose() > Next > End Using > > > > ちなみに MediaType = 12 は、ドライブの種類が HDD(SSD) であるものを指しています。 > ドライブ指定にしたいなら、WHERE DeviceId = 'C:' で抽出しておけば OK 。 普段、接することのない、いろんなコードの記述方法があり、完全には理解が出来ておりませんが、 コードがエラーなく動くことを確認いたしました。大変 勉強になります。 CPU、物理メモリ情報も 上記コードを参考にして取得したいと思います。 ありがとうございました。 |