デスクドライブのシリアル番号取得          <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