driveget 으로 얻는건 볼륨 번호이므로 제가 원하는것과 다릅니다.
이 시리얼 번호는 변경이가능해서 소용이 없습니다.
구글에서 찾아보니 얼추 스크립트는 찾았으나 제가 원하는것과 조금씩 틀리네요 ㅠㅠ.
수정가능하신분 부탁좀 드립니다.
1번스크립트
#NoEnv
#SingleInstance force
for Disk in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_DiskDrive where interfacetype = ""USB""") {
DeviceId := Disk.PNPDeviceID
StringSplit DeviceProperties, DeviceId, \&
SerialNumber := DeviceProperties6 ; The sixth element of the array contains the serial number
MsgBox %SerialNumber%
}
return
컴퓨터에 모든드라이브를 확인해버리네요...
F 드라이브만 확인하도록 드라이브를 지정하고싶습니다.
2번스크립트
MsgBox % GetDeviceSerialFromUSBdrive( "E:" )
GetDeviceSerialFromUSBdrive( Drv="" ) {
DriveGet, DriveType, Type, %Drv%
IfNotEqual,DriveType,Removable, Return
RegRead, Hex, HKLM, SYSTEM\MountedDevices, \DosDevices\%Drv%
VarSetCapacity(U,(Sz:=StrLen(Hex)//2)), VarSetCapacity(A,Sz+1)
Loop % Sz
NumPut( "0x" . SubStr(hex,2*A_Index-1,2), U, A_Index-1, "Char" )
DllCall( "WideCharToMultiByte", Int,0,Int,0, UInt,&U,UInt,Sz, Str,A,UInt,Sz, Int,0,Int,0)
StringSplit, Part, A, #
ParentIdPrefixCheck := SubStr( Part3,1,InStr(Part3,"&",0,0)-1 )
Loop, HKLM, SYSTEM\CurrentControlSet\Enum\USBSTOR,1,0
{ Device := A_LoopRegName
Loop, HKLM, SYSTEM\CurrentControlSet\Enum\USBSTOR\%Device%,1,0
{ Serial := A_LoopRegName
RegRead, PIPrefix, HKLM, SYSTEM\CurrentControlSet\Enum\USBSTOR\%Device%\%Serial%
, ParentIdPrefix
If ( PIPrefix = ParentIdPrefixCheck ) {
RegRead, DeviceFN, HKLM, SYSTEM\CurrentControlSet\Enum\USBSTOR\%Device%\%Serial%
, FriendlyName
Return, SubStr( Serial,1,InStr(Serial,"&",0,0)-1 ) " " DeviceFN
}}
}}
XP에서는 값을 못가져오네요 ㅠㅠ.
Windows 운영체제라면 모두 정상적으로 값을 가져왔으면합니다.