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 ]