0

こんにちは、以下のスクリプトを使用して、コンピューターで DVD ドライブを見つけようとしていました。GetDriveType は常に 1 を返します。手動でドライブ文字を渡しても 1 が返されます。なぜそうなっているのか教えてください。nsis スクリプトはまったく初めてです。

System::Call 'kernel32::GetLogicalDrives()i.r0'
StrCpy $1 $windir 3 ; Fallback if things go wrong
StrCpy $2 0
StrCpy $4 65 ; 'A'
loop:
    IntOp $3 $0 & 1
    ${If} $3 <> 0
        IntFmt $3 "%c:\" $4
        MessageBox MB_OK "Drive : $3"
        System::Call 'kernel32::GetDriveType(t,.r3)i.r5'
        MessageBox MB_OK "Value of 5555555: $5"
        StrCmp $5 5 0 NoDrive
            MessageBox MB_OK "Found drive $3"
            StrCpy $1 $3
        Nodrive:
            ;do nothing
    ${EndIf}
    IntOp $4 $4 + 1
    IntOp $0 $0 >> 1
StrCmp $0 0 "" loop
System::Call 'kernel32::GetDriveType(t,"D:\")i.r5'
StrCmp $5 5 0 NoDr
    MessageBox MB_OK "Found D as $D"
NoDr:
4

1 に答える 1

1

正しい構文は次のとおりですSystem::Call 'kernel32::GetDriveType(tr#)i.r#'(コンマはパラメーター区切り記号であり.、入力がないことを意味し、この場合は入力があります)。

!include LogicLib.nsh
System::Call 'kernel32::GetLogicalDrives()i.r0'
StrCpy $2 0
StrCpy $4 65 ; 'A'
loop:
    IntOp $3 $0 & 1
    ${If} $3 <> 0
        IntFmt $3 "%c:\" $4
        System::Call 'kernel32::GetDriveType(tr3)i.r5'
        DetailPrint "$3=$5"
    ${EndIf}
    IntOp $4 $4 + 1
    IntOp $0 $0 >> 1
StrCmp $0 0 "" loop
于 2012-08-24T22:18:35.653 に答える