раз поправил сообщение, дополню
Цитата MKN:
Т.е. нужно дождаться окончания всех возникших процессов. »
|
В таком случае нет, функция дождётся завершения указанного процесса, завершения дочерних процессов функция ждать не будет
Цитата MKN:
Возможно ли занести каждое найденное устройство в свою отдельную переменную ? Т.е. сколько устройств (кол-во их, заранее ессно не известно) - столько и переменных. »
|
Для твоего кода необходимо именно отдельные переменные, или можно сделать что-то типа массива?
Если делать отдельными переменными, то там просто заносить данные не совсем удобно (если на каждую букву диска делать сравнение), так не пойдёт?
читать дальше »
Код:
!include "logiclib.nsh"
!include "FileFunc.nsh"
var var_Sum
var var_Drives
Name "test"
OutFile "!test.exe"
InstallDir "$TEMP"
Function .onInit
call GetDrivesFunc
StrCpy $0 0
GetList:
IntOp $0 $0 + 1
${GetOptions} "$var_Drives" "/$0=" $1
${GetOptions} "$var_Drives" "/$0_type=" $2
MessageBox MB_OK|MB_ICONINFORMATION "Всего устройств: $var_Sum$\n$1 = $2"
StrCmp $0 "$var_Sum" 0 GetList
MessageBox MB_OK|MB_ICONINFORMATION "готово$\n$\n$var_Drives"
quit
FunctionEnd
Function GetDrivesFunc
StrCpy $var_Sum 0
StrCpy $var_Drives ""
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"
IntOp $var_Sum $var_Sum + 1
StrCpy $var_Drives "$var_Drives /$var_Sum=$3 /$var_Sum_type=$5"
; плюсуем значение переменной, в которой хранится общее количество найденных устройств
; заносим данные о букве диске и о его типе в подпеременные
StrCpy $R0 "$R0 $3$5"
${EndIf}
IntOp $4 $4 + 1
IntOp $0 $0 >> 1
StrCmp $0 0 "" loop
FunctionEnd
Section
SectionEnd
В итоге, в одной переменной
$var_Drives будет хранится инфа о всех найденных устройствах и их типы, а в переменной
$var_Sum общее количество найденных устройств
Формат данных будет такой:
Код:
/1=C:\ /1_type=2 /2=D:\ /2_type=4
Вытащить данных не сложно, достаточно обратиться командой ${GetOptions} с указанием порядкового номера:
Код:
${GetOptions} "$var_Drives" "/1=" $1
${GetOptions} "$var_Drives" "/1_type=" $2
в переменной $1 - буква диска
в переменной $2 - тип устройства