Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для K.A.V.

Ленивый кусок мяса


Contributor


Сообщения: 1986
Благодарности: 723

Профиль | Сайт | Отправить PM | Цитировать


раз поправил сообщение, дополню

Цитата 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 - тип устройства

-------
[Справочник по командам Windows] -- [Справочник по NSIS] -- [SFX Creator - для создания SFX архивов]


Последний раз редактировалось K.A.V., 17-08-2014 в 13:45.

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:01, 17-08-2014 | #1287