» Генерируем случайное число

K.A.V.
www.oszone.net
22.02.2010
Автор: K.A.V.
Последнее обновление: 09.08.2012

На этой страничке я предоставлю вам код, с помощью которого вы сможете сгенерировать случайное число, указав необходимый диапазон чисел
В начале кода:
!define Rnd "!insertmacro _Rnd"
!macro _Rnd _RetVal_ _Min_ _Max_
   Push "${_Max_}"
   Push "${_Min_}"
   Call Rnd
   Pop ${_RetVal_}
!macroend

Добавляем функцию генерации случайного числа:
Function Rnd
   Exch $0  ;; Min / return value
   Exch
   Exch $1  ;; Max / random value
   Push "$3"  ;; Max - Min range
   Push "$4"  ;; random value buffer

   IntOp $3 $1 - $0 ;; calculate range
   IntOp $3 $3 + 1
   System::Call '*(l) i .r4'
   System::Call 'advapi32::SystemFunction036(i r4, i 4)'  ;; RtlGenRandom
   System::Call '*$4(l .r1)'
   System::Free $4
   ;; fit value within range
   System::Int64Op $1 * $3
   Pop $3
   System::Int64Op $3 / 0xFFFFFFFF
   Pop $3
   IntOp $0 $3 + $0  ;; index with minimum value

   Pop $4
   Pop $3
   Pop $1
   Exch $0
FunctionEnd


И в любом месте кода вызываем функцию генерации числа:
${Rnd} $0 1 10
Таким образом, скрипт сгенерирует случайное число в диапазоне от 1 до 10, результат будет помещен в переменную $0