파일 시스템과 볼륨에 대한 정보를 얻는다
● 선언
privat declare Function GetVolumeInformation Lib "kernel32.dll" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
● 인수
lpRootPathName ━ 알고자 하는 볼륨의 루트 디렉토리, Null이면 현재 작업 디렉토리 지정된다. 네트워크 드라이브면 UNC로 지정에서 공유까지만 지정
lpVolumeNameBuffer ━ 볼륨의 이름을 받을 버퍼
nVolumeNameSize ━ lpVolumeNameBuffer 버퍼 길이
lpVolumeSerialNumber ━ 시리얼 번호
lpMaximumComponentLength ━ 파일명의 최대 길이
lpFileSystemFlags ━ 파일 플래그
lpFileSystemNameBuffer ━ 파일 시스템명
nFileSystemNameSize ━ lpFileSystemNameBuffer 버퍼 길이
● 반환
성공 ━ 0이 아닌 값
실패 ━ 0
GetVolumeInformation 사용해서 드라이브의 정보를 얻을수 있다.
다음은 소스의 결과 이미지 이다.
다은은 소스이다
Option Explicit
Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Private Declare Function GetVolumeInformation Lib "kernel32.dll" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
Private Const MAXBUFFER = &HFF
Private Const DRIVE_FIXED = 3
Private Sub cobDrive_Click() ' 드라이브 선택
If cobDrive.Tag = CStr(cobDrive.ListIndex) Then Exit Sub
labResult.Caption = GetDriveInfo(cobDrive.List(cobDrive.ListIndex))
cobDrive.Tag = cobDrive.ListIndex
End Sub
Private Sub Form_Load()
Dim Buffer As String ' 전체 드라이브명
Dim DriveName() As String ' 각 드라이브명
Dim ForCounter As Long ' For 카운터
Dim NumberDrive As Long ' 드라이브 수
Buffer = Space(MAXBUFFER) ' 콤보박스에 하드드라이브명을 지정한다.
GetLogicalDriveStrings MAXBUFFER, Buffer
DriveName = Split(Buffer, vbNullChar)
NumberDrive = UBound(DriveName)
For ForCounter = 0 To NumberDrive
If GetDriveType(DriveName(ForCounter)) = DRIVE_FIXED Then
cobDrive.AddItem Left(DriveName(ForCounter), InStrRev(DriveName(ForCounter), "\") - 1)
End If
Next ForCounter
cobDrive.ListIndex = 0
End Sub
Private Function GetDriveInfo(ByVal DriveName As String) As String ' 드라이브 정보를 얻는다.
Dim VolumeName As String ' 볼륨명
Dim SerialNumber As Long ' 시리얼 번호
Dim SerialNumberString As String ' 문자열로 변경한 시리얼 번호
Dim MaxFileNameLength As Long ' 최대 파일명 길이
Dim sysflags As Long ' 파일 시스템과 관련된 플래그
Dim FileSystemName As String ' 파일 시스템명
DriveName = DriveName & "\"
VolumeName = Space(MAXBUFFER)
FileSystemName = Space(256)
Call GetVolumeInformation(DriveName, VolumeName, MAXBUFFER, SerialNumber, MaxFileNameLength, 0&, FileSystemName, MAXBUFFER)
SerialNumberString = Trim(Hex(SerialNumber))
SerialNumberString = String(8 - Len(SerialNumberString), "0") & SerialNumberString
SerialNumberString = Left(SerialNumberString, 4) & "-" & Right(SerialNumberString, 4)
GetDriveInfo = "Volume Name: " & GetString(VolumeName)
GetDriveInfo = GetDriveInfo & vbCrLf & "Serial Number: " & SerialNumberString
GetDriveInfo = GetDriveInfo & vbCrLf & "Max File Name Length: " & MaxFileNameLength
GetDriveInfo = GetDriveInfo & vbCrLf & "File System: " & GetString(FileSystemName)
End Function
Private Function GetString(ByVal APIStr As String) As String ' 버퍼로 사용된 문자열에서 유효한 문자열만 반환
GetString = Left$(APIStr, InStr(APIStr, vbNullChar) - 1)
End Function
드라이브 정보를 얻기 위해 FileSystemObject의 GetDrive를 사용해도
드라이브의 정보를 얻을수 있다.
FileSystemObject를 사용하기 위해서는 Microsoft Scripting Runtime 참조하면 된다.
'API' 카테고리의 다른 글
waveOutGetNumDevs를 사용한 사운드 카드수 얻기 (0) | 2011.09.24 |
---|---|
어떤 윈도우의 키 보내기(윈도우 메세지 사용) (0) | 2011.09.24 |
FindExecutable을 사용한 확장자와 연결된 프로그램 경로 얻기 (0) | 2011.09.23 |
Beep를 사용한 PC 스피커로 음악 연주 (0) | 2011.09.23 |
CreateFont를 사용한 문자열 표시 각도 변환(메모리 사용후 대상 DC에 복사) (0) | 2011.09.22 |