【发布时间】:2017-10-08 06:59:29
【问题描述】:
好的,我从另一个问题中找到了这段代码,我是 NSIS 的新手。下面的问题
!define FILE_SUPPORTS_ENCRYPTION 0x00020000
!define FILE_READ_ONLY_VOLUME 0x00080000
!define FILE_VOLUME_QUOTAS 0x00000020
!macro MakeBitFlagYesNo flags bit outvar
IntOp ${outvar} ${flags} & ${bit}
${IfThen} ${outvar} <> 0 ${|} StrCpy ${outvar} "Yes" ${|}
${IfThen} ${outvar} == 0 ${|} StrCpy ${outvar} "No" ${|}
!macroend
StrCpy $0 "c:\"
System::Call 'Kernel32::GetVolumeInformation(t "$0",t,i ${NSIS_MAX_STRLEN},*i,*i,*i.r1,t,i ${NSIS_MAX_STRLEN})i.r0'
${If} $0 <> 0
!insertmacro MakeBitFlagYesNo $1 ${FILE_SUPPORTS_ENCRYPTION} $2
!insertmacro MakeBitFlagYesNo $1 ${FILE_READ_ONLY_VOLUME} $3
!insertmacro MakeBitFlagYesNo $1 ${FILE_VOLUME_QUOTAS} $4
MessageBox mb_ok "flags=$1 $\nFILE_SUPPORTS_ENCRYPTION=$2$\nFILE_READ_ONLY_VOLUME=$3$\nFILE_VOLUME_QUOTAS=$4"
${EndIf}
这是我需要得到的:
驱动器卷标:
文件系统:(Fat32、NTFS、exFat、...)
磁盘容量:(7.27TB、5.59TB、...)
可用空间:(4.62TB,632GB,...)
分配单元大小:(4096b, 16kb, 32kb, ...)
然后我需要在 if then 语句中使用该信息 只是不知道如何将上面的代码和结果变成下面的代码列表。
我曾尝试在 Google 上搜索有关 NSIS 和 GetVolumeInformation 的信息,但使用 GetVolumeInformation 我无法找到如何在任何地方获取和读取结果。
${If} $File_System <> "NTFS"
${EndIf}
${If} $Disk_Capacity < "1.86TB"
${EndIf}
${If} $Free_Space < "1.25TB"
${EndIf}
${If} $Allocation_Unit_Size <> "4096 bytes"
${EndIf}
MessageBox mb_ok "$Drive_Volume_Label$\n$File_System$\n$Disk_Capacity$\n$Free_Space$\n$Allocation_Unit_Size"
如果您可以为我发布答案代码,然后向我指出您获得信息(解释)代码的位置。如果我知道代码的用途是什么,这有助于我更快地学习代码。
谢谢, 阿尔伯特
【问题讨论】:
-
为什么需要分配单元?