デスクドライブのシリアル番号取得 <TOP>
指定したドライブのシリアル番号を取得します。
GetLogicalDrives 利用可能ディスクドライブ取得
GetVolumeInformation ルートディレクトリが呼び出しで指定されたファイルシステムとボリュームについての情報を返す
※一見固有の値のようですが、メーカーパソコンで同一機種のボリュームシリアルが、全て同一ということもあるそうです。
MACアドレスとハードディスクボリュームシリアル番号の組み合わせが、絶対ではありませんが確率的には利用可能かも・・
'================================================================ '= デスクドライブのシリアル番号取得(T) '= (GetVolumeInformation.bas) '================================================================ #include "Windows.bi" ' 利用可能ディスクドライブ取得 Declare Function Api_GetLogicalDrives& Lib "kernel32" Alias "GetLogicalDrives" () ' ルート ディレクトリが呼び出しで指定されたファイル システムとボリュームについての情報を返す Declare Function Api_GetVolumeInformation& Lib "kernel32" Alias "GetVolumeInformationA" (ByVal RootPathName$, ByVal VolNameBuff$, ByVal VolNameSize&, VolSerialNum&, MaxComponentLen&, FileSysFlag&, ByVal FileSysNameBuff$, ByVal FileSysNameSize&) #define MAX_PATH 260 Var Shared Text(3) As Object Var Shared Combo1 As Object Var Shared Button1 As Object For i = 0 To 3 Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i + 1))) Text(i).SetFontSize 14 Next Combo1.Attach GetDlgItem("Combo1") : Combo1.SetFontSize 14 Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 Var Shared Drive As String '================================================================ '= '================================================================ Declare Sub MainForm_Start edecl () Sub MainForm_Start() Drives = Api_GetLogicalDrives() '利用可能なディスクドライブ取得 If Drives = 0 Then Exit Sub '関数の失敗 For i = 0 To 25 'A〜Zドライブを検索する If (Drives And 1) = 1 Then Drive = Chr$(65 + i) 'ドライブ名(A〜Z)に変換 Drive = Drive & ":\" Combo1.AddString Drive End If Drives = Drives \ 2 'ドライブ検索 Next i End Sub '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var VolLabel As String Var Serial As Long Var MaxLen As Long Var Flags As Long Var nName As String Var s As String Var Ret As Long Drive = Left$(Combo1.GetText(Combo1.GetCursel), 3) Text(0).SetWindowText "" Text(1).SetWindowText "" If Api_GetVolumeInformation(Drive, VolLabel, MAX_PATH, Serial, MaxLen, Flags, nName, MAX_PATH) Then Text(0).SetWindowText "&&H" & Hex$(Serial) Text(1).SetWindowText Trim$(Str$(Serial)) End If End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End