タイトル : Re: 物理ドライブ(指定ドライブ)情報を取得 投稿日 : 2016/04/20(Wed) 00:03 投稿者 : 魔界の仮面弁士
> 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 。 'winioctl.h Enum MEDIA_TYPE Unknown F5_1Pt2_512 F3_1Pt44_512 F3_2Pt88_512 F3_20Pt8_512 F3_720_512 F5_360_512 F5_320_512 F5_320_1024 F5_180_512 F5_160_512 RemovableMedia FixedMedia End Enum |