1. 디스크 번호 상태 출력 재배치 - 선택된 디스크 번호 상태를 화면 상단으로 이동하여 가시성을 향상시킵니다. - 사용자가 현재 선택한 디스크를 빠르게 확인할 수 있습니다.
2. 파티션 라벨 및 할당 문자 변경 기능 추가 - 사용자가 각 파티션의 라벨과 드라이브 할당 문자를 쉽게 변경할 수 있도록 기능을 개선합니다. - 변경된 라벨 및 할당 문자는 프리셋에 저장하여, 다음 사용 시에도 동일한 설정을 적용할 수 있습니다. - 특히, Data 파티션에 대해서는 드라이브 문자 D를 우선 할당하며, 만약 D가 이미 사용 중인 경우, 시스템은 자동으로 순차적으로 다른 문자를 할당합니다.
3. WMI(winmgmts)를 이용하여 디스크 파티션의 세부 정보를 출력하는 기능이 추가되었습니다. - 기본 파티션 정보(diskpart - list partition)가 먼저 출력되며, N 버튼을 클릭하면 세부 정보를 확인할 수 있습니다. - 단, WMI 서비스가 누락된 환경에서는 N버튼의 세부 정보가 출력되지 않습니다.
WMI(winmgmts)를 이용하여 디스크 파티션의 세부 정보를 출력하는 기능이 추가되었습니다. - 기본 파티션 정보(diskpart - list partition)가 먼저 출력되며, N 버튼을 클릭하면 세부 정보를 확인할 수 있습니다. - 단, WMI 서비스가 누락된 환경에서는 N버튼의 세부 정보가 출력되지 않습니다.
영문 Windows 및 PE 환경에서 디스크 및 파티션 정보 출력 오류 수정 └▶ 한국어와 영문 환경 모두에서 시스템 언어를 우선으로 하여 출력되도록 개선
; Windows API를 사용하여 시스템 언어 확인
Func GetSystemDefaultUILanguage()
Local $hKernel32 = DllOpen("kernel32.dll")
If $hKernel32 = -1 Then
;MsgBox(16, "Error", "Unable to open kernel32.dll.")
Exit
EndIf
Local $aResult = DllCall($hKernel32, "ushort", "GetSystemDefaultUILanguage")
DllClose($hKernel32)
If @error Or Not IsArray($aResult) Then
;MsgBox(16, "Error", "Failed to call GetSystemDefaultUILanguage.")
Exit
EndIf
Return $aResult[0]
EndFunc
; 중복 방지 배열 선언
Local $aUsedDisks = []
; 디스크 정보 추출
Local $aLines = StringSplit($diskContent, @CRLF, 1)
For $i = 0 To UBound($aLines) - 1
Local $sLine = StringStripWS($aLines[$i], 3)
; 언어에 맞는 정규식 선택
Local $aData
If $bIsKorean Then
; 한국어 정규식
If StringRegExp($sLine, "^디스크\s+(\d+)\s+(\S+)") Then
$aData = StringRegExp($sLine, "^디스크\s+(\d+)\s+(\S+)\s+([\d,]+\s+[A-Za-z가-힣]+)\s+([\d,]+\s+[A-Za-z가-힣]+)\s*(\S*)\s*(\S*)$", 3)
EndIf
Else
; 영어 정규식
If StringRegExp($sLine, "^Disk\s+(\d+)\s+(\S+)\s+([\d,]+\s+[A-Za-z]+)\s+([\d,]+\s+[A-Za-z]+)\s*(\S*)\s*(\S*)$") Then
$aData = StringRegExp($sLine, "^Disk\s+(\d+)\s+(\S+)\s+([\d,]+\s+[A-Za-z]+)\s+([\d,]+\s+[A-Za-z]+)\s*(\S*)\s*(\S*)$", 3)
EndIf
EndIf
If IsArray($aData) Then
Local $diskNumber = $aData[0]
; 이미 출력된 디스크 번호인지 확인
If Not IsInArray($diskNumber, $aUsedDisks) Then
Local $size = $aData[2]
Local $dyn = $aData[4] == "*" ? "GPT" : "MBR"
; detail disk 명령어 실행 및 결과 읽기
FileDelete($sDiskInfoFile) ; 이전 명령 초기화
FileWrite($sDiskInfoFile, "select disk " & $diskNumber & @CRLF & "detail disk" & @CRLF)
RunWait(@ComSpec & " /c diskpart /s " & $sDiskInfoFile & " > " & $sResultFile, "", @SW_HIDE)
Local $detailContent = FileRead($sResultFile)
; 디스크 모델 추출
Local $model = "-"
; 디스크 모델 추출 정규식 수정
If $bIsKorean Then
Local $aModelMatch = StringRegExp($detailContent, "(?m)^([^\r\n]+)\r\n디스크 ID:", 1)
Else
Local $aModelMatch = StringRegExp($detailContent, "(?m)^([^\r\n]+)\r\nDisk ID:", 1)
EndIf
If IsArray($aModelMatch) Then
$model = StringStripWS($aModelMatch[0], 3)
EndIf
; 디스크 정보를 ListView에 추가
GUICtrlCreateListViewItem($diskNumber & "|" & $dyn & "|" & $size & "|" & $model, $hListView)
; 사용된 디스크 번호 배열에 추가
_ArrayAdd($aUsedDisks, $diskNumber)
EndIf
EndIf
Next
; 중복 방지 배열 선언
Local $aUsedPartitionNumbers = []
; 파티션 정보 추출
Local $aLines = StringSplit($partitionContent, @CRLF, 1)
For $i = 0 To UBound($aLines) - 1
Local $sLine = StringStripWS($aLines[$i], 3)
; 언어에 맞는 정규식 선택
Local $aData
If $bIsKorean Then
; 한국어 파티션 정보 정규식
If StringRegExp($sLine, "파티션\s+(\d+)\s+(\S+)\s+([\d,]+\s+[A-Za-z]+)\s+([\d,]+\s+[A-Za-z]+)") Then
$aData = StringRegExp($sLine, "파티션\s+(\d+)\s+(\S+)\s+([\d,]+\s+[A-Za-z]+)\s+([\d,]+\s+[A-Za-z]+)", 3)
EndIf
Else
; 영어 파티션 정보 정규식
If StringRegExp($sLine, "Partition\s+(\d+)\s+(\S+)\s+([\d,]+\s+[A-Za-z]+)\s+([\d,]+\s+[A-Za-z]+)") Then
$aData = StringRegExp($sLine, "Partition\s+(\d+)\s+(\S+)\s+([\d,]+\s+[A-Za-z]+)\s+([\d,]+\s+[A-Za-z]+)", 3)
EndIf
EndIf
If IsArray($aData) Then
Local $partitionNumber = $aData[0]
; 중복 파티션 번호 체크
If Not IsInArray($partitionNumber, $aUsedPartitionNumbers) Then
; 파티션 정보를 ListView에 추가
GUICtrlCreateListViewItem($aData[0] & "|" & $aData[1] & "|" & $aData[2] & "|" & $aData[3], $hListView)
; 사용된 파티션 번호 배열에 추가
_ArrayAdd($aUsedPartitionNumbers, $partitionNumber)
EndIf
EndIf
Next