5.ドライブのボリュームラベル・ファイルシステム・シリアルナンバー等を取得(29_Drv_05) (旧、SampleNo.000) |
1.DriveInfo.GetDrives メソッドを使ってのドライブのボリュームラベル他の情報を取得する 2.WMI の Win32_LogicalDisk クラスを使ってのドライブのボリュームラベル他の情報を取得する 3.WMI の Win32_LogicalDisk クラスで取得できるドライブ情報の一覧(参考) 4.文字列を指定のバイト数にカットする関数(漢字分断回避) 5. 6. |
下記プログラムコードに関する補足・注意事項 動作確認:Windows 8.1 (Windows 7) / VB2013 (VB2010) / Framework 4.5.1 / 対象の CPU:x86 Option :[Compare Text] [Explicit On] [Infer On] [Strict On] Imports :System.Management(WMI を使用する場合) 参照設定:System.Management(WMI を使用する場合) 参照設定方法の参照 その他 : : このサンプル等の内容を無断で転載、掲載、配布する事はお断りします。(私の修正・改訂・削除等が及ばなくなるので) 必要ならリンクをはるようにして下さい。(引用の場合は引用元のリンクを明記して下さい) |
1.DriveInfo.GetDrives メソッドを使ってのドライブのボリュームラベル他の情報を取得する |
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click TextBox1.Clear() Dim s1 As String = "{0} : ボリュームラベル {1} ファイルシステム {2}" For Each Drive As System.IO.DriveInfo In System.IO.DriveInfo.GetDrives() If Drive.IsReady Then TextBox1.Text &= String.Format(s1, Drive.Name, fStrCut(Drive.VolumeLabel, 20), _ fStrCut(Drive.DriveFormat, 10)) & vbCrLf End If Next End Sub |
2.WMI の Win32_LogicalDisk クラスを使ってのドライブのボリュームラベル他の情報を取得する |
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click TextBox1.Clear() Dim s1 As String = "" s1 = "{0} : ボリュームラベル {1} ファイルシステム {2} シリアルナンバー {3}" Dim mc As New ManagementClass("Win32_LogicalDisk") Dim moCollection As ManagementObjectCollection = mc.GetInstances() For Each mo As ManagementObject In moCollection TextBox1.Text &= String.Format(s1, mo("Name"), fStrCut(CStr(mo("VolumeName")), 20), _ fStrCut(CStr(mo("FileSystem")), 8), fStrCut(CStr(mo("VolumeSerialNumber")), 20)) & vbCrLf Next End Sub |
3.WMI の Win32_LogicalDisk クラスで取得できるドライブ情報の一覧(参考) |
私の環境での取得結果であって環境によって取得結果も変わります。 Access : 0 Name : C: Availability : *** 未設定 *** NumberOfBlocks : *** 未設定 *** BlockSize : *** 未設定 *** PNPDeviceID : *** 未設定 *** Caption : C: PowerManagementCapabilities : *** 未設定 *** Compressed : False PowerManagementSupported : *** 未設定 *** ConfigManagerErrorCode : *** 未設定 *** ProviderName : *** 未設定 *** ConfigManagerUserConfig : *** 未設定 *** Purpose : *** 未設定 *** CreationClassName : Win32_LogicalDisk QuotasDisabled : *** 未設定 *** Description : ローカル固定ディスク QuotasIncomplete : *** 未設定 *** DeviceID : C: QuotasRebuilding : *** 未設定 *** DriveType : 3 Size : 472495681536 ErrorCleared : *** 未設定 *** Status : *** 未設定 *** ErrorDescription : *** 未設定 *** StatusInfo : *** 未設定 *** ErrorMethodology : *** 未設定 *** SupportsDiskQuotas : False FileSystem : NTFS SupportsFileBasedCompression : True FreeSpace : 376907251712 SystemCreationClassName : Win32_ComputerSystem InstallDate : *** 未設定 *** SystemName : UserName LastErrorCode : *** 未設定 *** VolumeDirty : *** 未設定 *** MaximumComponentLength : 255 VolumeName : T012345000B MediaType : 12 VolumeSerialNumber : CA0D3FA71 |
4.文字列を指定のバイト数にカットする関数(漢字分断回避) |
Private Function fStrCut(ByVal Mystring As String, ByVal nLen As Integer) As String '文字列を指定のバイト数にカットする関数(漢字分断回避) If IsNothing(Mystring) Then Mystring = "Null" Dim sjis As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS") Dim TempLen As Integer = sjis.GetByteCount(Mystring) If nLen < 1 Or Mystring.Length < 1 Then Return Mystring If TempLen <= nLen Then '文字列が指定のバイト数未満の場合スペースを付加する Return Mystring.PadRight(nLen - (TempLen - Mystring.Length), CChar(" ")) End If Dim tempByt() As Byte = sjis.GetBytes(Mystring) Dim strTemp As String = sjis.GetString(tempByt, 0, nLen) '末尾が漢字分断されたら半角スペースと置き換え(VB2005="・" で.NET2003=NullChar になります) If strTemp.EndsWith(ControlChars.NullChar) Or strTemp.EndsWith("・") Then strTemp = sjis.GetString(tempByt, 0, nLen - 1) & " " End If Return strTemp End Function |
5. |
6. |
検索キーワード及びサンプルコードの別名(機能名) |
ドライブ Drive GetDrives メソッド Directory.GetLogicalDrives メソッド FileSystemProxy.Drives
プロパティ Environment.GetLogicalDrives メソッド WMIの Win32_LogicalDisk クラス 論理ディスク情報を取得 |