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 ]