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

タイトル 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、物理メモリ情報も 上記コードを参考にして取得したいと思います。
ありがとうございました。

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

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