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

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

Аватара для Shpionus

Старожил


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

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


Уже разобрался сам:
Код: Выделить весь код
#cs
----------------------
Приложение: Light Alloy
На какой(их) версии(ях) тестировалось: 3.5 build 5931; 3.5 build 5987; 4.0 build 6035; 4.1 build 6105

Автор скрипта: Sanja Alone (http://forum.oszone.net/member.php?userid=28800)
----------------------
#ce
;предотвращение возможности множественного запуска скрипта
If WinExists(@ScriptName) Then Exit
AutoItWinSetTitle(@ScriptName)
;блокируем мышь и клаву
;AutoItSetOption("TrayIconHide", 1)
;Отображать текущую строку сценария с помощью индикатора системной панели в режиме отладки.
AutoItSetOption("TrayIconDebug", 1)
AutoItSetOption("SendKeyDelay", 15)
If ProcessExists ( "ps.exe" )<>0 Then
     ProcessClose ( "ps.exe" )
     ProcessWaitClose ( "ps.exe" )
EndIf
;нельзя блокировать при находящемся в памяти Punto Switcher-е - не будет работать установка
;блокируем мышь и клаву
;If @OSType="WIN32_NT" Then BlockInput ( 1 )
#cs
----------------------
объявление переменных
----------------------

$Title, $TitleReg - базовый заголовок, заголовок окна загадок
$file - установочный файл
$InstPath - путь установки (!!! без обратного слэша в конце !!!)
$programgroup - в какую программную группу положить ярлыки программы
$ini - ini-файл с загадками/отгадками

----------------------
#ce
Global $Title='Light Alloy', $TitleReg='Для регистрации отгадайте загадку', $file='LAsetup.exe', $InstPath=@ProgramFilesDir & '\Light Alloy', $programgroup='Мультимедиа\Light Alloy', $ini=@ScriptDir & '\zagadki.ini'

#cs
----------------------
установка в тихом режиме
 
    ключи:
 /StMenu  - ярлыки в меню "Все программы" (1/0 - да/нет)
 /Desktop - ярлык на Рабочем столе (1/0 - да/нет)
 /Assoc   - ассоциации файлов на LA (1/0 - да/нет)
----------------------
#ce
If $InstPath<>@ProgramFilesDir & '\Light Alloy' Then
RunWait ( @ScriptDir & '\' & $file & ' "/Path=' & $InstPath & '" /S /StMenu=1 /Desktop=1 /Assoc=0' )
Else
RunWait ( @ScriptDir & '\' & $file & ' /S /StMenu=1 /Desktop=1 /Assoc=0' )
EndIf

; настройки
If FileExists ( @ScriptDir & '\LA.xml' ) Then
    FileCopy ( @ScriptDir & '\LA.xml', $InstPath & '\', 1 )
    FileSetAttrib ( $InstPath & '\LA.xml', "-R" )
EndIf

;---------------------
; регистрация
;---------------------

; считывание загадок/отгадок из ini-файла в массивы
$zag=IniReadSection($ini,"LA_ZAGADKI")
$otg=IniReadSection($ini,"LA_OTGADKI")

; запуск программы для регистрации
Run ( $InstPath & '\LA.exe' )
If WinWait ( $Title&' nag screen', '', 2 )=1 Then
WinActivate ( $Title&' nag screen' )
WinWaitActive ( $Title&' nag screen' )
ControlClick ( $Title&' nag screen', '', 'TBitBtn1')
EndIf

WinWait ( $Title )
WinActivate ( $Title )
WinWaitActive ( $Title )
ControlClick ( $Title, '', 'THoverButton5' )
AutoItSetOption("MouseCoordMode",2)
;если программа уже была зарегистрирована ранее, то закрываем ее окно
If WinWait ( $Title, 'UNREGISTERED' , 3 ) Then

; основной цикл регистрации
While 1
WinActivate ( $Title, 'UNREGISTERED' )
WinWaitActive ( $Title, 'UNREGISTERED' )
MouseClick("left", 75, 75, 1, 0)
WinWait ( $TitleReg )
WinActivate ( $TitleReg )
WinWaitActive ( $TitleReg )
; извлечение загадки из окна регистрации LA
$zag_la=ControlGetText($TitleReg,'','TEdit1')
; собственно, отгадывание - в кач-ве четвертого (доп. параметра) можете указать к-во символов для сравнения (по ум. 16).
$otg_la=ZagadkiOtgadki($zag,$otg,$zag_la)

Select
Case $otg_la <> 'error'
    WinActivate ( $TitleReg )
    WinWaitActive ( $TitleReg )
    ; вписывание ответа на загадку
    ControlSetText ( $TitleReg, '', 'TEdit2', $otg_la )
    Sleep ( 50 )
    ; проверка ответа
    ControlClick ( $TitleReg, '', 'TButton1' )
    WinWait ( $Title&' message' )
    ControlClick ( $Title&' message', '', 'TBitBtn1' )
    Sleep ( 70 )
    ; в принципе это лишняя проверка (на всякий случай - вдруг какой-то глюк с раскладкой клавы будет и отгадка впишется неверно)
    If WinExists ( $TitleReg ) Then
        WinClose ( $TitleReg )
        WinWaitClose ( $TitleReg )
    Else
        WinClose ( $Title, 'UNREGISTERED' )
        WinWaitClose ( $Title, 'UNREGISTERED' )
        WinClose ( $Title )
        WinWaitClose ( $Title )
        ExitLoop
    EndIf
Case Else
    WinClose ( $TitleReg )
    WinWaitClose ( $TitleReg )
EndSelect
WEnd
Else
WinClose ( $Title )
Sleep ( 50 )
WinClose ( $Title )
EndIf

Sleep ( 100 )

; перенос ярлыков
DirCopy ( @ProgramsDir & '\Light Alloy', @ProgramsCommonDir & '\' & $programgroup, 1 )
DirRemove ( @ProgramsDir & '\Light Alloy', 1 )

#cs
----------------------
Функция-отгадывалка :)

Переменная $chars - к-во символов для сравнения (необязательный параметр, по ум. равно 16).
Для справки - самая короткая загадка моего списка состоит из 19 символов.
----------------------
#ce
Func ZagadkiOtgadki(ByRef $ArrayZ, ByRef $ArrayO, $string, $chars=16)
    Local $i, $s=StringLeft($string,$chars), $max=$ArrayZ[0][0]
    For $i = 1 To $max
        If StringLeft($ArrayZ[$i][1],$chars)=$s Then
            SetError(0)
            Return $ArrayO[$i][1]
        Else
            If $i=$max Then
                SetError(1)
                Return 'error'
            EndIf
        EndIf
    Next
EndFunc

;BlockInput ( 0 )
75 выделенное жирным было 235
Теперь при регистрации нажимается как положено кнопка "регистрация", а не "справка"
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:07, 18-06-2010 | #83