Windowsがインストールされているフォルダを調べる

Windowsがインストールされているフォルダを調べるテクニックです。

サンプル(32bit) ダウンロード

'Windowsディレクトリを取得するAPI
Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long


Private Sub Command1_Click()
    
    Dim nRC As Long
    Dim sWIN_DIR As String
    Dim sWork_DIR As String
    Dim sVolumeName As String
    Dim nVolumeSerialNumber As Long
    Dim nMaximumComponentLength As Long
    Dim nFileSystemFlags As Long
    Dim sFileSystemNameBuffer As String

    'Windowsがインストールされているドライブを取得
    sWIN_DIR = Space$(255)
    nRC = GetWindowsDirectory(sWIN_DIR, Len(sWIN_DIR))
    sWIN_DIR = Left(sWIN_DIR, InStr(sWIN_DIR, Chr(0)) - 1)
    
    'ボリューム情報の取得にはルートパスにする必要があります
    sWork_DIR = Left(sWIN_DIR, 3)
    
    'ボリューム情報取得
    sVolumeName = Space(MAX_PATH)
    sFileSystemNameBuffer = Space(MAX_PATH)
    Call GetVolumeInformation(sWork_DIR, sVolumeName, MAX_PATH, nVolumeSerialNumber, nMaximumComponentLength, nFileSystemFlags, sFileSystemNameBuffer, MAX_PATH)

    '文字列にはNullが入ってるのでNullをカット
    sVolumeName = Left(sVolumeName, InStr(sVolumeName, Chr(0)) - 1)
    sFileSystemNameBuffer = Left(sFileSystemNameBuffer, InStr(sFileSystemNameBuffer, Chr(0)) - 1)
    
    'TextBoxにボリューム情報をセット
    Text1.Text = ""
    Text1.Text = Text1.Text & "WindowsDirectory:" & sWIN_DIR & vbCrLf
    Text1.Text = Text1.Text & vbCrLf
    Text1.Text = Text1.Text & "【 " & sWork_DIR & " 】Information" & vbCrLf
    Text1.Text = Text1.Text & "VolumeName:" & sVolumeName & vbCrLf
    Text1.Text = Text1.Text & "VolumeSerialNumber:" & Str(nVolumeSerialNumber) & vbCrLf
    Text1.Text = Text1.Text & "MaximumComponentLength:" & Str(nMaximumComponentLength) & vbCrLf
    Text1.Text = Text1.Text & "FileSystemFlags:" & Str(nFileSystemFlags) & vbCrLf
    Text1.Text = Text1.Text & "FileSystemFlags:" & sFileSystemNameBuffer & vbCrLf
    
End Sub

サンプル解説

GetWindowsDirectory関数でWindowsフォルダを取得しています。

引数の内容は次の通りです。
(引数の名前は、Declare Functionで指定したものです)

メンバー I/O 説明
lpBuffer Out Windowsフォルダを受け取るバッファ
nSize In lpBufferのサイズ

取得したフォルダ名には末尾にNullが入っているので除去する必要があります。

また、サンプルのように可変長の変数を渡す場合は、あらかじめ領域を確保しておく必要があります。

戻り値は、成功時はNullを含まないWindowsフォルダを格納するサイズを返します。失敗時はFalseを返します。


[ Window Close ]