1

システムに接続されているすべての USB ハード ドライブ/SSD を検索しようとしています。

コマンド DriveGet, , Typeは、「不明、リムーバブル、固定、ネットワーク、CDROM、RAMDisk」 という値を返す必要があります。

以下のスクリプトは、接続方法に関係なく、すべてのドライブに対して「 Fixed 」を返します。

これを修正する方法はありますか?

DriveGet, DriveList , List,
Loop,

{

  MyDrive :=  SubStr(Drivelist, A_Index,1)  

  If (MyDrive = "")
    break

  MyDrive = %MyDrive%

  DriveGet, MyLabel, serial, %MyDrive%
  DriveGet, MyType, Type,  %MyDrive%:\
  msgbox, Drive %MyDrive% Type %MyType%

}
4

2 に答える 2

1

これは、この投稿のスクリプトを使用して Autohotkey Forums で解決された問題のようです。以下のスレッドのスクリプトを含めました。試してみてください。

#NoEnv
#SingleInstance force
SetBatchLines -1
ListLines Off
SendMode Input
SetWorkingDir %A_ScriptDir%


    pd := PhysicalFromLogical("F")       ; This is the drive you want to test
    if GetType(pd) = "Fixed" and GetInterface(pd) = "USB"
        MsgBox Drive is Fixed and USB
    else
        MsgBox Drive is either not Fixed or not USB
return


; Given a drive letter like "f" return the physical
; drive associated with it, i.e. \\\\.\\PHYSICALDRIVE2
PhysicalFromLogical(d)
{
    wmi := ComObjGet("winmgmts:")

    for LogicalDisk in wmi.ExecQuery("Select * from Win32_LogicalDiskToPartition")
        if InStr(LogicalDisk.Dependent,d)
            for Partition in wmi.ExecQuery("Select * from Win32_DiskDriveToDiskPartition")
                if (Partition.Dependent = LogicalDisk.Antecedent) {
                    Start := InStr(Partition.Antecedent, """") + 1
                    return SubStr(Partition.Antecedent, Start, -1)
                }
    return 0
}

; Given a drive path like \\\\.\\PHYSICALDRIVE2 return the
; drives interface type, i.e. "USB"
GetInterface(pd)
{
    wmi := ComObjGet("winmgmts:")

    for Drive in wmi.ExecQuery("Select * from Win32_DiskDrive where DeviceId = """ pd """")
        return Drive.InterfaceType
    return 0
}

; Given a drive path like \\\\.\\PHYSICALDRIVE2 return the drive type, i.e. "Removable"
; This is just a wrapper for DriveGet
GetType(pd)
{
    StringReplace pd, pd, \\, \, All
    DriveGet out, Type, %pd%
    return out 
}
于 2013-08-19T13:56:09.070 に答える