ボリューム名の取得と設定          <TOP>


GetVolumeInformation ファイルシステムの情報を取得する関数
SetVolumeLabel ボリューム名の設定

 

例ではCドライブのボリューム名(ボリュームラベル)を初期状態のローカル ディスクからWindowsに変更しています。

エディットボックスにボリューム名を入力し『設定』ボタンをクリックします。

Windowsに変更して『設定』ボタンクリック                          変更された状態の確認


 

'================================================================
'= ボリューム名の取得と設定
'=    (SetVolumeLabel.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&)

' 指定されたボリュームに、ボリュームラベルを設定
Declare Function Api_SetVolumeLabel& Lib "kernel32" Alias "SetVolumeLabelA" (ByVal lpRootPathName$, ByVal lpVolumeName$)

#define MAX_PATH 260

Var Shared Edit1 As Object
Var Shared Combo1 As Object
Var Shared Text(3) As Object

For i = 0 To 3
    Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i + 1)))
    Text(i).SetFontSize 14
Next i
Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14
Combo1.Attach GetDlgItem("Combo1") : Combo1.SetFontSize 14

Var Shared RootPathName 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
            RootPathName = Chr$(65 + i)         'ドライブ名(A〜Z)に変換
            RootPathName = RootPathName & ":\"
            Combo1.AddString RootPathName
        End If
        Drives = Drives \ 2                     'ドライブ検索
    Next i
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var VolumeName As String * MAX_PATH
    Var SerialNumber As Long
    Var MaxCompoLength As Long
    Var FileSystemFlags    As Long
    Var FileSystemName As String * 32
    Var Ret As Long

    '対象のルートパス名を指定
    RootPathName = Left$(Combo1.GetText(Combo1.GetCursel), 3)

    'ボリュームに関する情報を取得
    Ret = Api_GetVolumeInformation(RootPathName, VolumeName, Len(VolumeName), SerialNumber, MaxCompoLength, FileSystemFlags, FileSystemName, Len(FileSystemName))

    'ボリュームに関する情報を表示
    Text(3).SetWindowText Left$(VolumeName, InStr(VolumeName, Chr$(0)) - 1)
    Edit1.SetWindowText ""    
End Sub

'================================================================
'=
'================================================================
Declare Sub Button2_on edecl ()
Sub Button2_on()
    Var VolumeName As String
    Var Ret As Long

    'ボリューム名を指定
    VolumeName = GetDlgItemText("Edit1")

    'ボリューム名を設定
    Ret = Api_SetVolumeLabel(RootPathName, VolumeName)
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End