Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [Архив - Часть 1.1] AutoIt скрипты (http://forum.oszone.net/showthread.php?t=46951)

EgOrus 21-03-2005 02:12 308627

[Архив - Часть 1.1] AutoIt скрипты
 
Внимание!
Тема переведена в архивное состояние





(настоятельно рекомендуется к прочтению/поиску)


Руководство к действию по работе c AutoIt.

Ну во превых, к моему удивлению, утилита (и компонента activeX) уже успела обновиться до версии 3.1.0 (7 фев 2005) и заполучить множество дополнительных функций (появилась возможность создавать граф. интерфейс к своим скриптам :). К сожалению русскоязычной справки пока нет.
Скачать можно здесь

Почему лишь руководство? Потомучто к программе прилагается обширная справка с описанием самой программы и команд, в т.ч. и на русском языке. Основные команды используемые в нашем случае в новой версии не поменялись. Я рассмотрю лишь самые азы, кот. необходимы для создания самого простого скрипта, в принципе этого достаточно для установки практически любой программы, просто знание дополнительных команд позволят сделать скрипт более компактным и красивым.

На сегоднящний день имеется 2 распространненых способа по автоматизации установки
1. Использование утилиты AutoIt и файлов скриптов au3, кот. в последствии можно компилировать в исполнимые файлы exe, не требующие утилиты AutoIt.exe
2. Использование VBS и JS скриптов, этот способ можно расширить за счет использования activeX компоненты - autoitX (к слову сказать - я пользуюсь именно этим методом).

Для примера создадим скрипт по установки Alcohol120%. Самое неприятное в его установки это окно с подтверждением установки SCSI драйвера. Это мы и поправим.
Цитата:

Цитата Скрипт alc120.au3
'Блокировка клавы и мышки
BlockInput(1)

'Ожидание окна установки SCSI адаптера
WinWait ("Мастер нового оборудования","", 0)

'Пауза на 500 мс на всякий случай, для слабых машин, чтобы окно успело обновиться
Sleep(500)

'Послать в активное окно нажатие клавиши ENTER
send("{ENTER}")

WinWait ("Мастер нового оборудования","Для закрытия мастера", 0)

Sleep(1000)

'Послать в указанное окно ControlClick для кнопки с назв. класса Button9
ControlClick ("Мастер нового оборудования","Для закрытия мастера", "Button9")

'Снятие блокировка клавы и мышки
BlockInput(0)

Скрипт и утилита autoit3.exe будет лежать рядом с дистром, и будет запускаться перед запуском дистрибутива.
Создадим файл с названием alc120.au3 в win1251 кодировке
Теперь нужно заблокировать клавиатуру и мышь чтобы наглый пользователь не нажал что-нибудь или не сменил случайно фокус с активного окна во время работы скрипта.

'Блокировка клавы и мышки (многие команды предназначены для посыла в активное окно)
BlockInput(1)

Скрипт запустился и теперь ожидает запуска инсталяра и появление сигнального окна, кот. сообщит скрипту что программа запущена и можно продолжать выполнение скрипта. Для того чтобы узнать название окна нужно использовать спец. утилитку AU3Info.exe, кот. входит в комплект дистрибутива autoit. Запускаем ее, после чего запускаем дистрибутив Alcohol120% и доходим до того места где вылазит окно Мастер нового оборудования с вопросом об установке SCSI адаптера. Активируем его кликнув по заголовку мышкой и жмем CTRL+ALT+F, в результате в окне AU3Info информация о текущем окне зафиксируется:
Цитата:

>>>>>>>>>>>> Window Details <<<<<<<<<<<<<
Title: Мастер нового оборудования
Class: #32770


копируем название этого заголовка, там же можно посмотреть текст наличествующий в этом окне, если необходимо.
Цитата:

>>>>>>>>>>> Visible Window Text <<<<<<<<<<<
Завершение работы мастера нового оборудования
Мастер завершил установку программ для:
SCSI/RAID хост-контроллер
Для закрытия мастера нажмите кнопку "Готово".
< &Назад
Готово
Отмена


'Ожидание окна установки SCSI адаптера (в зависимости от языка винды заголовок будет разным)
WinWait ("Мастер нового оборудования","", 0)

WinWait ( "title" [, "text" [, timeout]] )
title - название окна кот. ожидает скрипт для продолжения работы,
text - любой текст в этом окне, нужен если последующее окно после нажатия кнопки, имеет такой же заголовок
timeout - таймаут, время через кот. ожидание прекратиться, 0 - никогда


'Пауза на 500 мс на всякий случай, для слабых машин, чтобы окно успело обновиться
Sleep (500)

После того как окно с нужнымм заголовком появилось, скрипт должен послать активному окну клавишу ENTER, в результате будет нажата кнопка по умолчанию (в нашем случае "далее"). Список клавиатурных нажатий см. в справке.

'Послать в активное окно нажатие клавиши ENTER
Send ("{ENTER}")

Далее продолжится устанока SCSI адаптера вплоть до появление последнего окна с предложением закрыть мастер.
'Ожидание окна окончания установки SCSI адаптера
WinWait ("Мастер нового оборудования","Для закрытия мастера", 0)

'Ждем 600 мс. для того чтобы окно успело обновиться
Sleep (600)

Теперь нам нужно нажать клавишу готово, можно воспользоваться тем же методом что и выше Send ("{ENTER}"), но для разнообразия воспользуемся другим, не всегда ведь нам нужна будет кнопка по умолчанию кот. нажимается клавшей ввод. Используем метод ControlClick, кот. позволяет кликнуть по определенному объекту в окне исходя из его идентификатора (Control ID) или Названия Класса (ClassName). Чтобы узнать то или другое используем вышеупомянутую утилитку AU3Info, только теперь подводим курсор на нужную кнопку и смотрим на параметр "ClassNameNN", копируем значение Button9, и используем в скрипте.
Цитата:

>>>>>>>>>>> Control Under Mouse <<<<<<<<<<<
Size: X: 327 Y: 327 W: 75 H: 23
Control ID: 12325
ClassNameNN: Button9
Text: Готово


'Послать в указанное окно ControlClick для кнопки с назв. класса Button9
ControlClick ("Мастер нового оборудования","Для закрытия мастера", "Button9")

ControlClick ( "title", "text", controlID [, button] [, clicks]] )
title - название окна кот. ожидает скрипт для продолжения работы,
text - любой текст в этом окне, нужен если последующее окно после нажатия кнопки, имеет такой же заголовок
controlID - собственно идентификатор
button - какую кнопку использовать "left", "right" или "middle
clicks - количество кликов


Последнее что нужно сделать - снять блокировку с клавы и мышки.
'Снятие блокировка клавы и мышки
BlockInput(0)

После этого скрипт завершается, а алкоголик заканчивает установку.

Теперь нужно проверить работу скрипта.
Cоздаем бат-файл:
Цитата:

Цитата alc.bat
start C:\Test\AutoIt3.exe alc120.au3
msiexec.exe /passive /norestart /i "C:\Test\setup.msi"

В процессе выполнения скрипта в трэе появится занчок с буквой A, кот. показыает что скрипт выполняется, после отработки он исчезнет, если в процессе установки возникли проблеммы жмем CTRL+ALT+DEL (даже если клава заблокирована) и снимаем процесс autoit3.exe.

Если скрипт отлажен и проблем не возникает, для удобства можно скомпилировать его в .exe файл (содержит в себе утилиту autoit3.exe и скрипт .au3, кот. исполняется).
Для этого можно воспользоваться утлитой Aut2Exe.exe (входит в комплект с дистрибутивом autoit3).
Если нужно будет в последствии что-то изменить в скрипте, то полученный .exe файл можно будет конвертнуть назад в .au3 с помощью другой утилиты Exe2Aut.exe

Что касается 2го способа установки, то просто приведу пример, установки Alcohol120%, кот. использую я
Цитата:

Цитата alc120.vbs

Dim WshShell, fso, objArgs, AutoIt, dir

Set WshShell = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
Set AutoIt = WScript.CreateObject("AutoItX.Control")
On Error Resume Next

' Path to current vbs folder to successfully launch script in WPI
dir = fso.GetParentFolderName(WScript.ScriptFullName)

WshShell.Run ("msiexec.exe /passive /norestart /i" & dir & "\setup.msi")

'Блокировка клавы и мышки
AutoIt.BlockInput "on"
'Ожидание окна установки SCSI адаптера
AutoIt.WinWait "Мастер нового оборудования", "", 0
AutoIt.Sleep 500
AutoIt.Send "{ENTER}"
'Ожидание окна окончания установки SCSI адаптера
AutoIt.WinWait "Мастер нового оборудования", "Для закрытия мастера", 0
AutoIt.Sleep 600
AutoIt.Send "{ENTER}"
AutoIt.BlockInput "off"

WshShell.Run ("REGEDIT /S" & dir & "\sets.reg")

Wscript.Quit

В заключение хочу сказать что AutoIt это не только и не столько средство для автоматизации установки различных приложений, это скриптовый язык для автоматизации работы с приложениями, окнами, файлами и реестром с помощью него вполне реально создать небольшую програмку.

---------------------------------------------------------------------------------------------------

Разобранный здесь скрипт тестировался в vmware 4.5 на WinXP.rus SP2

D@nil 21-03-2005 04:55 308633

Статья Клас :)
Только я непонял чем лучше autoitX

D@nil 21-03-2005 05:26 308635

Думаю ешё надо добавить про Переменные и настройки AutoIt.

Переменная должна начинаться с символа $ и может содержать буквы, цифры и символы подчеркивания _.
Цитата:

$exe_1 = "Setup.exe /S"
$exe_2 = "Rusian.exe /S"
RunWait( $Exe_1 )
run( $Exe_2 )
Продолжительность паузы между последовательными симуляциями нажатий клавиатуры. Время в миллисекундах.
Цитата:

AutoItSetOption("SendKeyDelay", 10)
Отображать или нет текущую строку сценария с помощью индикатора системной панели в режиме отладки. Полезно для отладки скриптов
Цитата:

AutoItSetOption("TrayIconHide", 0) ;0=не выводить строку (Стандартное значение), 1=отображать строку
Отображать/Скрыть в системной панели индикатор AutoIt.
Цитата:

AutoItSetOption("TrayIconDebug", 0) ;0 = отображать(Стандартное значение), 1 = скрыть

EgOrus 21-03-2005 05:28 308636

D@nil
Сам по себе autoitX ничем не лучше, скорей даже наоборот по функционалу уступает, а у меня он используется как расширение функций vbs-cкриптов. При использовании такой связки чуть меньше гемора и чуть больше возможностей.

Т.е. если рассмотреть по шагам то получится
Использование Autoit3.exe через CMD-файл или например WPI:
1. команда запуска скрипта через Autoit3.exe или компилированный скрипт
2. команда запуска устанавливаемого приложения
3. команда запуска возможных reg файлов
4. копирование дополнительных файлов
По идее все это можно сделать через .au3, но как-то это некрасиво получится и громоздко :)

Использование vbs, все 4 шага легко делаются в пределах одного VBS-файла, при этом не нужно использовать autoit3.exe или тем более компилить скрипт, этот же vbs можно использовать для обычной установке вне CD или DVD.

Ага, переменные я оставил на потом, а про дебаг сам не знал :)

D@nil 21-03-2005 05:45 308640

EgOrus
Где тогда должна лежать утилитка autoitX Т.К. файл alc120.vbs ссылается на AutoIt
AutoIt.Sleep 600
AutoIt.Send "{ENTER}"

EgOrus 21-03-2005 06:23 308644

autoit - это не утилитка, это объект ActiveX
Set AutoIt = WScript.CreateObject("AutoItX.Control") - объявление объекта Autoit
AutoIt.Sleep 600 - использование функции объекта Autoit, в данном случае функции sleep





Sanja Alone 21-03-2005 07:14 308655

как ПРАВИЛЬНО отличить 2 "одинаковых" окна средствами AutoIt?
 
Вопрос: как ПРАВИЛЬНО отличить 2 "одинаковых" окна средствами AutoIt?
Т.е., они конечно не одинаковые, одинаковы только все параметры окон отображаемые с пом. AutoIt Reveal Mode.
Реально текст в окнах разный, но AutoIt Reveal Mode показывает только одинаковые строки.

Я нашел в хелпе по AutoIt вот такую штуку:
DetectHiddenText, <on | off>
но, даже если она действительно определяет скрытый текст,
непонятно как добраться до результата сией операции...
Через
WinGetActiveStats, <Title Var>, <Width Var>, <Height Var>, <Xpos Var>, <Ypos Var>
не выйдет, т.к. эта функция не извлекает текст окна.


Сначала я сделал так, но здесь те самые два окна с одинаковыми заголовками и текстом застопорили скрипт:
(проблемный фрагмент я выделил красным цветом)

Код:

Run, %ProgramFiles%\\Sonic Foundry\\Sound Forge 6.0\\forge60.exe %systemdrive%\\install\\test.mpg
WinWaitActive, Sonic Foundry Sound Forge 6.0,Purchase...
Send, {ENTER}
WinWaitActive, Sonic Foundry - MPEG Plug-In,Progress1
LeftClick, 400, 340
WinWaitActive, Sonic Foundry,Progress1
LeftClick, 120, 240
WinWaitActive, Sonic Foundry,Progress1
LeftClick, 100, 273

Send, %Serial2%
Send, {ENTER}
WinWaitActive, MainConcept MPEG-1,2 Pro Plug-In,Thank you for purchasing MainConcept MPEG-1&2 Pro Plug-In.
Send, {ENTER}
WinWaitClose, MainConcept MPEG-1,2 Pro Plug-In,Thank you for purchasing MainConcept MPEG-1&2 Pro Plug-In.
WinClose, Sonic Foundry Sound Forge 6.0
WinWaitClose, Sonic Foundry Sound Forge 6.0
Sleep, 50

Т.е. второе окно появилось и на этом все, а клик для активизации поля ввода серийника уже не проходит.


Затем я таки поборол эту каку,
но явно неправильным методом (3 сек. задержка + 2 двойных клика),
т.к. в конце приходится убивать процесс (иначе он вызывает крит.ошибку).
Правда, при этом информация о регистрации сохраняется.

Код:

Run, %ProgramFiles%\\Sonic Foundry\\Sound Forge 6.0\\forge60.exe %systemdrive%\\install\\test.mpg
WinWaitActive, Sonic Foundry Sound Forge 6.0,Purchase...
Send, {ENTER}
WinWaitActive, Sonic Foundry - MPEG Plug-In,Progress1
LeftClick, 400, 340
WinWaitActive, Sonic Foundry,Progress1
LeftClick, 120, 240
Sleep, 3000
LeftClick, 100, 273
LeftClick, 100, 273
LeftClick, 100, 273
LeftClick, 100, 273

Send, %Serial2%
Send, {ENTER}
WinWaitActive, MainConcept MPEG-1,2 Pro Plug-In,Thank you for purchasing MainConcept MPEG-1&2 Pro Plug-In.
Send, {ENTER}
WinWaitClose, MainConcept MPEG-1,2 Pro Plug-In,Thank you for purchasing MainConcept MPEG-1&2 Pro Plug-In.
WinWaitActive, Sonic Foundry Sound Forge 6.0
RunWait, taskkill.exe /F /IM forge60.exe
Sleep, 2000

Какие буду идеи?

EgOrus 21-03-2005 07:38 308658

Sanja Alone
надо было в существующую тему добавлять.
А какая у тебя версия autoit? reveal mode был в версии 2.x на сколько я помню

Opt("WinDetectHiddenText", 0)
и потом используешь WinWait ( "title" [, "text" [, timeout]] , но вместо text попробуй использовать hiddentext из второго окна

Sanja Alone 22-03-2005 01:40 308889

Цитата:

надо было в существующую тему добавлять.
Ну не посмотрел я, каюсь.

Цитата:

А какая у тебя версия autoit? reveal mode был в версии 2.x на сколько я помню
Да, ты прав: версия 2.64. Когда-то скачал и не юзал, а теперь понадобилась.

Сейчас качаю 3.1.0 - посмотрю, может там что-то придумали.
Надеюсь, там уже есть определение окна по идентификатору.

type 23-03-2005 06:54 309198

Установил, AutoIt v3.
пытаюсь запустить что нить комадндой
Цитата:

Run("adbacrob6.exe", "C:\Install\Graphic", @SW_HIDE)
не прокатывает и все((
говорит, что "Unable to execute the external program"
но все лежит именно по этому пути.
может есь какой секре, хотя в хелпе ясно сказано как запускать exe и cmd файлы.

EgOrus 23-03-2005 07:18 309202

type
на сколько я помню, надо уазывать полный путь к программе, т.е. что-то типа c:\Install\adbacrob6.exe, можно использовать переменные окружения н-р: Run(@ProgramFilesDir & "\Alcohol Soft\Alcohol 120\Alcohol.exe")
что касается твоего пути, то это рабочая папка, а не путь до программы

type 23-03-2005 07:29 309206

ОО!!!!....зарабоооталааа))))
я Вам благодарен!)

Debugger 23-03-2005 17:15 309381

Вопрос из области флейма

Блин такая дилемма - с одной стороны, можно с помощью AutoIt забабахать конкретный диск с кучей софта и не мучиться, а с другой стороны, охота все-таки взять, помучиться и все-таки заставить приложение ставиться в "тихом" режиме с "родными" ключами. Что делать?

EgOrus 23-03-2005 18:02 309408

Debby
Искать ключи на msfn'е, если нет пробовать самому исходя из инстолятора, а если уж и это не помогло то все равно придется мучиться пока скрипты составлять будешь :)

Sanja Alone 24-03-2005 02:27 309568

Короче, обошел я эту гадость с одинаковыми окнами (они оказались абсолютно одинаковы даже для AutoIt Window Info).
Обошел опять не совсем правильно, но влазить в функции с указателями мне не хотелось (уж сильно мутно):

Код:

...
Run ( '"' & @ProgramFilesDir & '\Sonic Foundry\Sound Forge 6.0\forge60.exe" ' & EnvGet('systemdrive') & '\install\test.mpg' )
WinWaitActive ( 'Sonic Foundry Sound Forge 6.0', 'Purchase...' )
Send ( '{ENTER}' )
WinWaitActive ( 'Sonic Foundry - MPEG Plug-In' )
MouseClick( "left", 400, 340, 1, 0 )
WinWaitActive ( 'Sonic Foundry' )
;переименовываем окно, чтобы скрипт не завис
WinSetTitle ( 'Sonic Foundry', '', "SF" )
WinWaitActive ( 'SF' )
MouseClick( "left", 120, 240, 1, 0 )
;это окно - причина переименования предыдущего, т.к. окна по ВСЕМ параметрам идентичны (AutoIt Window Info)
WinWaitActive( 'Sonic Foundry' )
;активизируем поле ввода серийника (через ControlSetText к полю не достучаться - его не видно)
MouseClick( "left", 100, 273, 1, 0 )

;3-й шаг регистрации "MainConcept MPEG-1&2 Pro Plug-In" - вводим серийник
Send ( $Serial2 )
Send ( '{ENTER}' )
WinWaitActive ( 'MainConcept MPEG-1,2 Pro Plug-In', 'Thank you for purchasing' )
Send ( '{ENTER}' )
WinWaitClose ( 'MainConcept MPEG-1,2 Pro Plug-In', 'Thank you for purchasing' )
;дожидаемся окна Sound Forge, чтобы сохранились данные регистрации
WinWaitActive ( 'Sonic Foundry Sound Forge 6.0' )
;здесь (при нормальном закрытии Sound Forge с пом. WinClose) происходит крит.ошибка,
;поэтому просто убиваем процесс (все рег. данные уже сохранены)
;(для красоты спрячем процесс убийства с пом. флага @SW_HIDE)
RunWait ( 'taskkill.exe /F /IM forge60.exe', '', @SW_HIDE )
Sleep ( 1000 )
;снимаем блокировку мыши и клавы
BlockInput ( 0 )

Жаль, что в новой версии AutoIt нельзя работать с элементами:
  • TreeView
  • CheckListBox
Пример первого - выбор компонент в установщике WinAmp
Пример последнего - выбор компонент в установщиках K-Lite Codec Pack
(по идее, можно применить silent.inf файл, но у меня параметр components=... игнорируется напрочь)

D@nil 24-03-2005 06:28 309591


Спасиб Sanja Alone метод WinSetTitle удобный, Возьму на заметку

type 24-03-2005 06:58 309599

Как можно в текстовое поле ввести значение.
а то ввожу
WinWait("AutoCAD 2002 Setup","&Serial Number:")
Send("{4}")
Send("{0}")
Send("{0}")
Send("{TAB}")
Send("{1}")
Send("{2}")
Send("{3}")
Send("{4}")
Send("{5}")
Send("{6}")
Send("{7}")
Send("{8}")
Send("{TAB}")
Send("{T}")
......
ну и в таком духе, как можно ввести в поле сразу все значение?

D@nil 24-03-2005 07:48 309608

type Можно.
WinWait("AutoCAD 2002 Setup","&Serial Number:")
Send("400" & {TAB} & "12345678" & "{TAB}" & "T")
А вобще смотри справку к AutoIt3 :beer:

type 24-03-2005 08:33 309615

точно точно....D@nil так есть...надо читать хелп...
Цитата:

Send("400" & {TAB} & "12345678" & {TAB} & "T")
ток у меня без кавычек для {TAB} не нработает т.е. надо так
Send("400" & "{TAB}" & "12345678" & "{TAB}" & "T")
Но ты выручил...спасибо.!!))

Aspirine 25-03-2005 21:35 310112

Ребята у меня проблема!!
Устанавливаю скриптом VirtulСD, пробую без компиляции все ок работает. Потом кампилирую как написано к руководстве. После кампиляции у меня получается вместо 29мбайтного файла установки 100кб? В чём проблема подскажте??


Sanja Alone 26-03-2005 03:46 310196

Aspirine
При компиляции, получается *.exe файл с тем же, что и у *.au3 именем.
В твоем случае итоговое имя совпадает с именем файла-установщика самой проги VirtualCD и он перезаписывается поверх.
Просто смени имя *.au3 файла, скажем на autoit_vcd.au3, тогда при компиляции получишь autoit_vcd.exe.

А вообще, на кой тебе этот VirtualCD? Тот же Alcohol прекрасно монтирует его файлы *.vcd и *.000 (только при их добавлении, в списке нужно выбрать "все файлы", а не "все поддерживаемые образы")
А если нужно создавать образы CD/DVD самостоятельно добавляя/удаляя файлы/каталоги, то можно воспользоваться UltraISO. К тому же, UltraISO понимает наверное все форматы образов, и может их конвертировать в iso, nrg, ccd, bin.

P.S. Я когда-то тоже юзал VCD (v4 и немного v5), но тогда это был чуть-ли не единственный нормальный эмулятор.
Все течет, все меняется... (C) не мое


----------------------------


type
В твоем варианте посылки строкой символов, на слабой машине TAB может просто не успеть перевести фокус (если не увеличить "SendKeyDelay") на другое поле и будет бяка.
IMHO, правильнее (и быстрее) будет не симулировать нажатия клавиш, а непосредственно ввести данные в соотв. поле. В какое? - посмотри с пом. AutoIt Window Info.
Вот, как пример (установка Ultra ISO v7.5.1.965):

Код:

;скрыть в системной панели индикатор AutoIt
AutoItSetOption("TrayIconHide", 1)
;блокируем мышь и клаву
BlockInput ( 1 )
;запуск установки в тихом режиме
RunWait ( 'uiso75me-s.exe /VERYSILENT /SP-' )
;запуск проги для появления диалога регистрации
Run ( @ProgramFilesDir & '\UltraISO\UltraISO.exe' )
WinWait ( 'Добро пожаловать' )
WinActivate ( 'Добро пожаловать' )
ControlClick ( 'Добро пожаловать', '', 'TButton4' )
WinActivate ( 'Регистрация' )
;ввод рег. данных
ControlSetText ( 'Регистрация', '', 'TEdit4', 'Имя регистрации' )
ControlSetText ( 'Регистрация', '', 'TEdit5', 'хххх' )
ControlSetText ( 'Регистрация', '', 'TEdit3', 'хххх' )
ControlSetText ( 'Регистрация', '', 'TEdit2', 'хххх' )
ControlSetText ( 'Регистрация', '', 'TEdit1', 'хххх' )

ControlClick ( 'Регистрация', '', 'TButton2' )
WinWaitActive ( 'Подсказка' )
Send ( '{ENTER}' )
WinWaitClose ( 'Подсказка' )
Sleep ( 50 )
;удаление с раб. стола, и перенос ярлыков в более удобный каталог
FileDelete ( EnvGet("USERPROFILE") & '\Рабочий стол\UltraISO.lnk' )
DirCopy ( EnvGet("ALLUSERSPROFILE") & '\Главное меню\Программы\UltraISO', EnvGet("ALLUSERSPROFILE") & '\Главное меню\Программы\CD и DVD утилиты\UltraISO', 1 )
DirRemove ( EnvGet("ALLUSERSPROFILE") & '\Главное меню\Программы\UltraISO', 1 )
;снимаем блокировку мыши и клавы
BlockInput ( 0 )

Есть еще один плюс такого подхода - никакие автопереключатели раскладки (Punto Switcher и т.п.) не испортят ввод серийников.

Aspirine 26-03-2005 21:20 310334

Sanja Alone
Огромное спасибо!!!!!
Всё прекрасно заработало. Я сам нелавно начал изучать autoit крипты, поэтому ошибаюсь на лёгком и часто...
Насчёт VirtualCD. Я диск другу делаю, котрый в компах ни буи-бум, и не желает учиться работать с другими прогами(он до сизх пор пользуется v4.3 если не ошиюбаюсь..) Сам я ЮЗАЮ АЛКОГОЛЬЧИК.

Sanja Alone 27-03-2005 01:27 310388

Aspirine

Всегда рад помочь.
А юзать Autoit я тоже недавно начал - около недели назад (да еще сдуру с версии 2.64). Потом пришлось по-быстрому переписать готовые скрипты под версию 3.1.0. Правда, конвертер немного помог :-) Сегодня поеду знакомому винду ставить - посмотрю на работу своего unattended-сидюка на реальной, а не вирт. машине...

Vadikan 04-05-2005 02:18 321419

Вопрос к специалистам по AutoIt. Допустим, мне нужно изменить некую настройку в программе. Настройка выставляется при помощи чекбокса. Я не знаю отмечен чекбокс или нет, т.к. некоторые юзеры могли его отметить. Можно ли при помощи AutoIt выполнить проверку (отмечен или нет) и соответственно отметить чекбокс только в случае, если он не отмечен?

piterpen 04-05-2005 13:49 321558

вышла в прошлом месяце AutoIt v3.1.1
http://www.autoitscript.com/cgi-bin/...t-v3-setup.exe

русская справка
http://www.autoitscript.com/cgi-bin/...n-v3.0.102.zip

jurikorn 05-05-2005 19:14 321949

Vadikan.
Можно. Autoit Это позволяет

ControlCommand ( "title", "text", controlID, "command", "option" )

option:
IsChecked, "" (вернуть 1, если Button отмечена)
Check, "" (отметить radio или Button)
UnCheck, "" (снять отметку radio или Button)

Vadikan 05-05-2005 22:07 321988

jurikorn
Спасибо! Видимо придется мне разбираться с AutoIt (а так лень было это делать ;-), если не найду другого решения своей задачи...

Vadikan 07-05-2005 03:48 322349

Вникнув в проблему детальнее я не вижу как мне определить ControlID в моем окне. Это Word 2002, окно Tools | Options. Похоже все эти чекбоксы не имеют индивидуальных ControlID.

Через реестр, похоже, тоже не вариант, т.к. regshot отслеживает такой ключ
Код:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\9040210900063D11C8EF00054038389C\Usage]
на разных машинах скорее всего набор цифр будет другим... Вообще, это не столько автоматическая установка, сколько автоматизация процесса настройки после установки, которую проводил не я.

VelDmi 06-06-2005 09:54 330294

Как определить Имя компьютера или его IP адрес?
С помощью _GetIP из справки возвращается значение -1.

jurikorn 06-06-2005 12:49 330345

Существуют макрокомманды:
@IPAddress1
IP адрес первого сетевого адаптера. Может вернуть и просто 127.0.0.1.
@IPAddress2
IP адрес второго сетевого адаптера. Равен 0.0.0.0, если отстутствует.
@IPAddress3
IP адрес третьего сетевого адаптера. Равен 0.0.0.0, если отстутствует.

@ComputerName
Сетевое название ПК.

Sanja Alone 12-06-2005 05:00 332260

Тут кто-то интересовался автоустановкой Lingvo. Я иногда юзаю этот словарик, ну и решил замутить скрипт автоустановки для своего Unattended DVD-юка.

Для автоустановки потребуются:
1. Образ первого сидюка Lingvo 10 Multilingual - LV10ML.iso (тупо скопировать содержимое сидюка в какой-либо каталог на автоустановочном CD/DVD и запустить setup.exe не получится - потребует вставить родной диск; с образа все работает)
2. Образ установочной дискеты Lingvo - ling10me_flp.ima (в zip-е всего-то 2Кб, но немогу прикрепить - меня назовут пиратом и заклеймят позором :( )
3. Virtual Floppy Driver некоего Kenji Kato - (нужны 2 файла vfd.exe и vfd.sys)
4. Предварительно установленный и 1 раз запускавшийся Alcohol 120% или DaemonTools с хотя бы одним вирт. приводом в системе
5. Нижеприведенный скрипт
(Все файлы должны лежать в одном каталоге, 2 файла vfd - в подкаталоге vfd)
Код:

;Перед запуском этого скрипта, даже если Алкоголь уже установлен, его (Алкоголь)
;нужно один раз запустить для применения параметров виртуального привода
;В сл. применения DT, также требуется его запуск и установка в систему хотя бы одного вирт. привода
;(нажать ПКМ на иконке DT в трее и выбрать "set number of devices" - "1 drive")

;
;скрыть в системной панели индикатор AutoIt

AutoItSetOption("TrayIconHide", 1)
AutoItSetOption("SendKeyDelay", 20)
;блокируем мышь и клаву
BlockInput ( 1 )
;Объявление переменных
;$i - счетчик, используемый в цикле определения буквы виртуального привода
;$virtdrv - маркер (будем устанавливать в 0, если исп-ся DaemonTools и в 1 в случае применения Alcohol-я)
;$daemondir - каталог, куда установлен DaemonTools (без обратного слэша в конце)
;(присваиваем переменной значение, к-рое соотв. пути Демона по умолчанию)
;$alcoholdir - каталог, куда установлен Алкоголь (без обратного слэша в конце)
;(присваиваем переменной значение, к-рое соотв. пути Алкоголя по умолчанию)

Local $i, $virtdrv, $alcoholdir=@ProgramFilesDir & '\Alcohol Soft\Alcohol 120', $daemondir=@ProgramFilesDir & '\D-Tools'
;Проверяем какой эмулятор установлен и монтируем образ Lingvo в первый привод установленного эмулятора
;Если не один не установлен - выходим из скрипта с сообщением о необходимости установки эмулятора

If FileExists ( $daemondir & '\daemon.exe' )=1 Then
      $virtdrv=0
      ;Демонтируем текущий образ из первого вирт. привода Демона.
      ;(это необязательно)

      RunWait ( $daemondir & '\daemon.exe -noicon -unmount 0' )
      ;Монтируем образ Lingvo на первый виртуальный CD/DVD-привод
      Run ( $daemondir & '\daemon.exe -noicon -mount 0,"' & @ScriptDir & '\LV10ML.iso"' )
    ElseIf FileExists ( $alcoholdir & '\AxCmd.exe' )=1 Then
      $virtdrv=1
      ;Демонтируем текущий образ из первого вирт. привода Алкоголя.
      ;(это необязательно)

      RunWait ( $alcoholdir & '\AxCmd.exe 1: /U' )
      ;Монтируем образ Lingvo на первый виртуальный CD/DVD-привод
      Run ( $alcoholdir & '\AxCmd.exe 1: /M:' & @ScriptDir & '\LV10ML.iso' )
    Else
      BlockInput ( 0 )
      MsgBox ( 0, '', 'Для установки Lingvo требуется DaemonTools или Alcohol 120%.' & @LF & 'Сейчас установка Lingvo будет прекращена.' )
      Exit
EndIf
;Ждем процесс "autorun.exe" не более 10 сек., если появится - закрываем
;(даже если диск без авторана, все равно нужна пауза на монтирование iso-файла)

If ProcessWait ( "autorun.exe", 10 )=1 Then
ProcessClose ( "autorun.exe" )
ProcessWaitClose ( "autorun.exe" )
EndIf
Sleep ( 100 )
;Определение буквы виртуального CDROM-а (67 - ASCII-код символа "C", 90 - "Z")
;(в качестве маркерного файла используем "ABBYY Lingvo 10 Multilingual Dictionary.msi")

$i = 67
While FileExists( Chr($i) & ':\ABBYY Lingvo 10 Multilingual Dictionary.msi' )=0 AND $i<=90
    $i = $i + 1
WEnd
Sleep ( 50 )
;Запускаем установку Lingvo
;(/L1049 - русский язык диалоговых окон, SERIALNUMBER=сюда введите свой серийный номер)

Run ( Chr($i) & ':\setup.exe /L1049 /v"SERIALNUMBER=XXXX-XXXX-XXXX-XXXX-XXXX"' )
WinWaitActive ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Лицензионный договор' )
;Я принимаю условия лицензионного договора
ControlClick ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Лицензионный договор', 'Button3' )
Send ( '{ENTER}' )
WinWaitActive ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Укажите сведения о себе' )
Send ( '{ENTER}' )
WinWaitActive ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'При установке вы можете использовать установочную дискету' )
;Копируем с CD/DVD образ установочной дискеты Lingvo во временный каталог
;(установщик Lingvo будет производить запись на эту "дискету" в процессе
;инсталляции, следовательно, он должен быть доступен для записи)

FileCopy( @ScriptDir & '\ling10me_flp.ima', @TempDir & '\ling10me_flp.ima', 1 )
Sleep ( 500 )
;Снимаем с образа установочной дискеты Lingvo атрибут Read-Only
;(файл копировался с CD, и явно не Far-ом :), а значит недоступен для записи)

FileSetAttrib( @TempDir & '\ling10me_flp.ima', "-R" )
Sleep ( 500 )
;Монтируем в виртуальном флопповоде (vfd - Virtual Floppy Driver) образ установочной дискеты Lingvo
RunWait ( @ScriptDir & '\vfd\vfd.exe MOUNT ' & @TempDir & '\ling10me_flp.ima /L:B', '', @SW_HIDE )
Sleep ( 500 )
;продолжаем установку
WinActivate ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'При установке вы можете использовать установочную дискету' )
Send ( '{ENTER}' )
WinWaitActive ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Выберите режим установки и укажите папку' )
;Выборочная установка
;(для Стандартной сразу жать ENTER (удалив ControlClick) и перейти к
STD)
ControlClick ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Выберите режим установки и укажите папку', 'Button3' )
Send ( '{ENTER}' )
WinWaitActive ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Выберите компоненты программы' )
;отключение ger-ru-ger словаря
Send ( '{DOWN}' )
Send ( '{RIGHT}' )
Send ( '{DOWN}' )
Send ( '{DOWN}' )
Send ( '!{DOWN}' )
Send ( '{UP}' )
Send ( '{ENTER}' )
;отключение fr-ru-fr словаря
Send ( '{DOWN}' )
Send ( '!{DOWN}' )
Send ( '{UP}' )
Send ( '{ENTER}' )
;отключение it-ru-it словаря
Send ( '{DOWN}' )
Send ( '!{DOWN}' )
Send ( '{UP}' )
Send ( '{ENTER}' )
;отключение esp-ru-esp словаря
Send ( '{DOWN}' )
Send ( '!{DOWN}' )
Send ( '{UP}' )
Send ( '{ENTER}' )
;отключить "озвученные немецкие слова"
Send ( '{DOWN}' )
Send ( '{DOWN}' )
Send ( '{DOWN}' )
Send ( '{RIGHT}' )
Send ( '{DOWN}' )
Send ( '{DOWN}' )
Send ( '!{DOWN}' )
Send ( '{UP}' )
Send ( '{ENTER}' )
Sleep ( 50 )
;продолжить установку
Send ( '{ENTER}' )
;STD
WinWaitActive ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Хранение настроек словарей' )
Send ( '{ENTER}' )
WinWaitActive ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Начало установки' )
Send ( '{ENTER}' )
WinWaitActive ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Установка ABBYY Lingvo 10 Multilingual Dictionary успешно завершена' )
Send ( '{ENTER}' )
Sleep ( 70 )
;Демонтируем образ уст. дискеты Lingvo и отрубаем вирт. дисковод
RunWait ( @ScriptDir & '\vfd\vfd.exe UMOUNT', '', @SW_HIDE )
Sleep ( 30 )
RunWait ( @ScriptDir & '\vfd\vfd.exe STOP', '', @SW_HIDE )
Sleep ( 30 )
RunWait ( @ScriptDir & '\vfd\vfd.exe REMOVE', '', @SW_HIDE )
Sleep ( 30 )
;Переносим ярлыки Lingvo в более удобное (мне) место
;(я не люблю беспорядка в меню "Программы" и делаю это для всех устанавливаемых прог)

DirCopy ( @ProgramsCommonDir & '\ABBYY Lingvo 10', @ProgramsCommonDir & '\Переводчики\ABBYY Lingvo 10', 1 )
DirRemove ( @ProgramsCommonDir & '\ABBYY Lingvo 10', 1 )
;Удаляем образ уст. дискеты Lingvo (он больше не понадобится)
FileDelete ( @TempDir & '\ling10me_flp.ima' )
Sleep ( 50 )
;Убиваем процесс Lvagent
ProcessClose ( "Lvagent.exe" )
ProcessWaitClose ( "Lvagent.exe" )
Sleep ( 50 )
;Демонтируем образ CD-диска Lingvo из вирт. привода
If $virtdrv=0 Then
      RunWait ( $daemondir & '\daemon.exe -noicon -unmount 0' )
    Else
      RunWait ( $alcoholdir & '\AxCmd.exe 1: /U' )
EndIf
Sleep ( 50 )
;Удаляем Lingvo из автозапуска (кому хочется, чтобы Lingvo висело в трее - удалите следующие 2 строки)
RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "Lingvo Launcher")
RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "LingvoTraining")
;Может выскочить эта ошибка
;(окно "setup.exe - Диск отсутствует", сообщение "В устройстве нет диска. Вставьте диск в устройство X:")
;Если да - закрываем процесс setup.exe

If ProcessWait ( "setup.exe", 7 )=1 Then
ProcessClose ( "setup.exe" )
ProcessWaitClose ( "setup.exe" )
EndIf
Sleep ( 50 )
;снимаем блокировку мыши и клавы
BlockInput ( 0 )

Пользуйтесь, кому нужно.

P.S. Устанавливается Lingvo долго (до 10 мин.), самый тормозной этап - "установка индекса" на образ дискеты. А когда индикатор "установки индекса" доходит почти до конца, может показаться, что комп (или мой скрипт) завис. Так и должно быть.
Эх, где-то я такое уже видел... :)

Solitude 29-06-2005 01:51 336829

Возникла такая проблема:
при установке программы необходмо импортировать данные из reg файла
делаю так
Код:

Run("regedit.exe /s Fail.reg", "")
Установка производится до первой загрузки Windows(RunOnceEx.cmd), но почему то запись в реестр не происходит ?
Самое интересное то, что если уже когда Windows загрузилась запусить этот же файл установки то данные в реестр экспортируются. Может кто подскажет решение этой проблемы ?

Sanja Alone 29-06-2005 02:54 336845

Solitude
Попробуй так:
Код:

RunWait ( "regedit /S Fail.reg", "", @SW_HIDE )
И правильно будет и незаметно благодаря @SW_HIDE.

Solitude 29-06-2005 22:10 337043

Sanja Alone
Не работает... :-((

Sanja Alone 30-06-2005 02:16 337088

Solitude
Ну можешь еще так попробовать:
Код:

RunWait ( 'regedit /S ' & @ScriptDir & '\Fail.reg', '', @SW_HIDE )
;или так:
RunWait ( @Comspec & ' /C regedit /S ' & @ScriptDir & '\Fail.reg', '', @SW_HIDE )

Если не катит, значит ты пытаешься писать в изменяемые при загрузке ветки/ключи реестра.

Чуть не забыл - все эти варианты работают только если reg-файл и скрипт находятся в одном каталоге. В противном случае, нужно писать полный путь. И еще одно - пробелы внутри кавычек (' ') стоят все по делу, а не для красоты - не удали случайно.

P.S. С моего автоустановочного диска все ставящиеся проги (с пом. WPI, к-рый действует также через RunOnceEx) вносят изменения в реестр именно первым способом (см. предыдущий пост) - все данные импортируются.

Solitude 30-06-2005 20:54 337318

Sanja Alone
Вот этот спопсоб
Код:

RunWait ( 'regedit /S ' & @ScriptDir & '\Fail.reg', '', @SW_HIDE )
сработал
Спасибо!!

Madcap 04-07-2005 15:40 338291

2 all

Возникла проблемка с Некоторыми комбинациями клавиш:

Код:

...
WinWait ("CDCheck - 3.0.1.43 [Personal non profit use]","", 0)
Sleep (300)
;Послать в активное окно комбинацию нажатий клавиш
Send ("!a")    ; alt+a
...

Эта комбинация (Впрочем ALT+[любая другая буква]) отлично выполняется в 2000 и ХР. А в 98, такое впечатление, игнорируется.
Кто нибудь с таким сталкивался? С чем это связано? Какие еще команды глючат? И как с этим бороться
Прога качана по ссылке piterpen

godoo 05-07-2005 10:53 338493

2 all

Здравствуйте, всем!
Помогите решить такую проблему: при установке приложения нужно изменить путь установки, так, чтобы не прописывать точный путь, а указать текущую системную папку Program Files (т.е. как-то указать не C:\Program Files\... , а %systemdrive% или %programs%). Ну никак не хочет :(

Madcap 05-07-2005 13:57 338563

godoo

так
Код:

@ProgramFilesDir
пробовал?

Madcap 06-07-2005 08:38 338755

2 all
Вопрос про комбинации клавиш снимается.
Как оказалось в Win98 команда Send некоректно отрабатывает при заблокированной клавиатуре и мышке (BlockInput(1))
Если клавиатуру не блокировать - все комбинации клавиш работают нормально

2 godoo

Скачай хелп - там описаны все переменные понимаемые AutoIT.
Раздел Указатель Макро

godoo 06-07-2005 09:07 338761

Madcap, спасибо за совет, но это я пробовал и хелп прочитал...
Вся проблема в том, при такой замене пути установки:
WinWaitActive ( '', 'Выбор директории установки...' )
ControlSetText ( '', 'Выбор директории установки...', 'Edit2', '@ProgramFilesDir\Software\' )
вылезает окно:
Директория @ProgramFilesDir\Software не может быть создана. Укажите другой путь.

Работает только с полным заданием пути.:(



Madcap 07-07-2005 17:02 339195

godoo

Сегодны экспериментировал с тоталом, получилось вот так:

Код:

;Ввод пути установки проги
ControlSend ( "Installation Total Commander 6.0", "", "Edit1", @ProgramFilesDir & "\totalcmd")


ched3n 08-07-2005 08:23 339341

пример скрипта
скрипт сравнивается с часами другого компьютера и каждые два часа качает фаил в заведомо созданую папку. как можно грамотно урезать , а то через чур большой
Код:

Opt('TrayIconHide', 0)
;Установка эталоного времени
#include <Process.au3>
$rc = _RunDos("net use \\comp /user:user password")
$rc = _RunDos("net time \\comp /set /yes")
TrayTip("Time", "Установка эталоного времени", 1, 1)
Sleep(1000)
TrayTip("clears any tray tip","",0)
 
;Скачка прайс листа
 
InetGet("http://www.name.ru/files.rar", "c:\files\files.rar", 1, 1)
While @InetGetActive
TrayTip("Price", "Обновление прайса", 5, 1)
Sleep(250)
Wend
Opt('TrayIconHide', 1)
Sleep(7200000)
Opt('TrayIconHide', 0)
 
;Скачка прайс листа
 
InetGet("http://www.name.ru/files.rar", "c:\files\files.rar", 1, 1)
While @InetGetActive
TrayTip("Price", "Обновление прайса", 5, 1)
Sleep(250)
Wend
Opt('TrayIconHide', 1)
Sleep(7200000)
Opt('TrayIconHide', 0)
 
;Установка эталоного времени
 
#include <Process.au3>
$rc = _RunDos("net use \\comp /user:user password")
$rc = _RunDos("net time \\comp /set /yes")
TrayTip("Time", "Установка эталоного времени", 2, 1)
Sleep(1000)
TrayTip("clears any tray tip","",0)
 
;Скачка прайс листа
 
InetGet("http://www.name.ru/files.rar", "c:\files\files.rar", 1, 1)
While @InetGetActive
TrayTip("Price", "Обновление прайса", 5, 1)
Sleep(250)
Wend
Opt('TrayIconHide', 1)
Sleep(7200000)
Opt('TrayIconHide', 0)
 
;Скачка прайс листа
 
InetGet("http://www.name.ru/files.rar", "c:\files\files.rar", 1, 1)
While @InetGetActive
TrayTip("Price", "Обновление прайса", 5, 1)
Sleep(250)
Wend
;завершение скрипта
Exit


godoo 08-07-2005 10:00 339362

Madcap, при таком способе перед тем путем, который стоит появляется вот это:
:\Ё ЁЁЁ Ё\Ё Ё ЁЁ ЁЁ\

Madcap 08-07-2005 12:48 339429

На счет удаления предыдущего пути - можно послать в это окно кучу {DEL}ов.
На счет
Цитата:

:\Ё ЁЁЁ Ё\Ё Ё ЁЁ ЁЁ\
незнаю.

Madcap 08-07-2005 13:36 339447

2 all
Скажите, плс, есть ли в этой проге какой нибудь аналог команды GO TO ?

Sanja Alone 09-07-2005 07:23 339680

Madcap
В хелпе написано такое (FAQ - 4. Where is the "goto" command?):
Цитата:

Just to get you started, the most basic use of Goto in version 2.64 was an infinite loop like:
Код:

:mylabel
...do something...
...and something else...
goto, mylabel

A simple v3 version of that is a While loop that is always "true".
Код:

While 1 = 1
  ...do something...
  ...do something else...
Wend

If there is a massive outcry about this after the launch of v3 then I may add it back in, but only to help people convert scripts.
Короче говоря, что-то подобное есть, а если goto требуется не в бесконечном цикле, то нужно (imho) использовать маркерную переменную как-то вот так:
Код:

$your_variable = "исходное значение"
;
;какой-то код, к-рый может повлиять на $your_variable
;
While $your_variable = "исходное значение"
  ...do something...
  ...do something else...
Wend

А еще посмотри в сторону Select...Case...EndSelect

Sanja Alone 09-07-2005 08:09 339684

godoo
Цитата:

Код:

WinWaitActive ( '', 'Выбор директории установки...' )
ControlSetText ( '', 'Выбор директории установки...', 'Edit2', '@ProgramFilesDir\Software\' )


Ты все правильно в хелпе прочитал, но недочитал... Макросы (@ProgramFilesDir и т.п.) не берутся в кавычки, а объединяются со строками с пом. оператора объединения строк - &

Т.о., приведи код к такому виду:
Код:

WinWaitActive ( '', 'Выбор директории установки...' )
ControlSetText ( '', 'Выбор директории установки...', 'Edit2', @ProgramFilesDir & '\Software' )

и все будет ОК.

И еще один момент: ты используешь директиву ControlSetText, и, следовательно, никаких del-ов посылать не нужно, т.к. в этом случае значение элемента Edit2 будет перезаписано новым и тебе не нужно беспокоиться о его начальном значении)

Sanja Alone 10-07-2005 01:07 339865

ched3n
Красивее будет сделать так:
1. Заменяешь #include и _RunDos на RunWait(@ComSpec & ' /C твоя_команда', '', @SW_HIDE);
2. Приводишь скрипт к виду:
Код:

;устанавливаем выход из скрипта по хоткею (в данном сл. это Ctrl+Alt+Z; выбор за тобой)
HotKeySet("^!z", "my_exit")
;запускаем основной бесконечный цикл
While 1 = 1
    Opt('TrayIconHide', 0)
    time_sync()
    dl_price()
    Opt('TrayIconHide', 1)
    Sleep(7200000)
Wend
;функция синхронизации времени
Func time_sync()
    RunWait(@ComSpec & ' /C net use file:///comp /user:user password', '', @SW_HIDE)
    RunWait(@ComSpec & ' /C net time file:///comp /set /yes', '', @SW_HIDE)
    TrayTip("Time", "Установка эталоного времени", 1, 1)
    Sleep(1000)
    TrayTip("clears any tray tip","",0)
EndFunc
;функция закачки прайса
Func dl_price()
    InetGet("http://www.name.ru/files.rar", "c:\files\files.rar", 1, 1)
    While @InetGetActive
        TrayTip("Price", "Обновление прайса", 5, 1)
        Sleep(250)
    Wend
EndFunc
;функция завершения скрипта
Func my_exit()
    Exit
EndFunc

Ес-но, можно бесконечный цикл заменить на конечный (используя переменную-счетчик или какое-то условие), дополнить функции закачки и синхронизации времени проверками (удаленный комп ведь может быть и недоступен). Но это уже будет украшательством. Захочешь - сделаешь. А приведенный выше скрипт будет выполняться бесконечно (до нажатия хоткея) независимо от доступности удаленной машины (функции пользователя по ум. всегда возвращают 0, ес-но, если это не переопределить с пом. директивы Return.

P.S. Синтаксис команд net use/time я оставлю на твоей совести, но на правильный он непохож; к тому-же, net use к синхронизации времени не имеет никакого отношения.

ched3n 10-07-2005 12:40 339932

спасибо за помощь
net use \\comp /user:user password авторизируется на удаленном компьютере
net time \\comp /set /yes синхронизирует время локального компьютера с удаленным

Madcap 11-07-2005 08:32 340063

Sanja Alone

Большое спасибо.

godoo 12-07-2005 11:37 340365

Ребята, все получилось!!!
ОГРОМНОЕ ВАМ СПАСИБО!!!

Izvr 12-07-2005 14:58 340435

Мой первый скрипт!
Установка FAR Manager, можете меня поздравить. И не говорите, что Фар можно как то проще поставить. Если просто разархивировать его в соответствующию директорию получится, во-первых, отсутствие ярлыков, во-вторых, в путях его системных не будет... В общем этот вариант самый оптимальный.
Вот текст:
BlockInput(1)
Run("Far1705.exe")
WinWait("FAR version 1.70 beta 5","",0)
Sleep(1000)
Send("{TAB}")
Send("{ENTER}")
WinWait("The FAR manager SETUP","&Folder to install FAR",0)
Send("{ENTER}")
WinWait("The FAR manager SETUP","Done",0)
Send("{ENTER}")
WinClose("FAR manager")
BlockInput(0)

ched3n 12-07-2005 18:01 340471

молодца

Sanja Alone 13-07-2005 02:37 340544

Izvr
Цитата:

во-первых, отсутствие ярлыков
Я этот вопрос решил просто - у меня Far со всеми плагинами ставится из rarsfx-архива. Т.о., можно создавать стандартные ярлыки и запускать до/после извлечения команду/файл на выполнение (в данном сл. - импорт настроек в реестр regedit /S settings.reg, где settings.reg=FarSave1.reg+FarSave2.reg).

Цитата:

во-вторых, в путях его системных не будет...
Это ты о чем? ВСЕ свои настройки Far хранит в реестре. Файлы SaveSettings.bat и RestoreSettings.bat в каталоге Far-а ты видел? Эти файлики сохраняют и восстанвливают настройки Far-а (в/из файлы/файлов FarSave1.reg и FarSave2.reg). А в системную переменную Path Фар себя вообще не пишет, да и новых переменных не создает.

Теперь по сути.
В скриптах, вместо WinWait лучше использовать WinWaitActive или связку WinWait + WinActivate. Во-первых, это избавляет от необходимости угадывания времени Sleep-а, и, во-вторых, позволяет избежать проблем с последующим несвоевременным нажатием клавиш.
И еще одно замечание: не нужно в функциях ожидания окон задавать нулевые таймауты. Смысл таймаута такой - ждать X окно не более Y секунд и в любом сл. идти дальше. При таймауте=0 будет сделана одна проверка на наличие искомого окна и сразу будет выполнена следующая функция, что также может вызвать проблемы, т.к. посылаемая комбинация клавиш передастся не в активный элемент окна, а х.з. куда (по ум. пауза для оконных операций у AutoIt составляет всего 250 мс). Для окон установщика Фара этого с головой хватает, но ведь может попасться приложение и с загаженными всяким мусором, медленно появляющимися окнами.

Установка Far-а:
Код:

AutoItSetOption("TrayIconHide", 1)
BlockInput ( 1 )
Run ( 'Far1705.exe' )
WinWaitActive ( 'FAR version' )
ControlClick ( 'FAR version', '', 'Button2' )
WinWaitActive ( 'The FAR manager SETUP', '&Folder to install FAR' )
;поставить галку "Associate FAR with RAR, ARJ, LZH, ZIP, HA, CAB and TGZ"
ControlClick ( 'The FAR manager SETUP', '&Folder to install FAR', 'Button4' )
;начать установку
ControlClick ( 'The FAR manager SETUP', '&Folder to install FAR', 'Button8' )
WinWaitActive ( 'The FAR manager SETUP', 'Installation completed' )
Send ( '{ENTER}' )
;перенос ярлыков в более удобное место
DirCopy ( @ProgramsCommonDir & '\FAR manager', @ProgramsCommonDir & '\Файл-менеджеры\FAR manager', 1 )
DirRemove ( @ProgramsCommonDir & '\FAR manager', 1 )
BlockInput ( 0 )


Izvr 13-07-2005 19:09 340735

Sanja Alone
Цитата:

Это ты о чем? ВСЕ свои настройки Far хранит в реестре. Файлы SaveSettings.bat и RestoreSettings.bat в каталоге Far-а ты видел? Эти файлики сохраняют и восстанвливают настройки Far-а (в/из файлы/файлов FarSave1.reg и FarSave2.reg). А в системную переменную Path Фар себя вообще не пишет, да и новых переменных не создает.
Ну а как тогда объяснить то, что я могу набрать в Run far и он у меня откроется? Я, конечно, допускаю возможность положить одноименный ярлык куда-нибудь в C:\windows, но мы не знаем всего того, что вшили разработчики в свой installer(так как они его к примеру залочили), так что SFX как то не очень надежно получается...
Цитата:

В скриптах, вместо WinWait лучше использовать WinWaitActive или связку WinWait + WinActivate. Во-первых, это избавляет от необходимости угадывания времени Sleep-а, и, во-вторых, позволяет избежать проблем с последующим несвоевременным нажатием клавиш.
Спасибо, учту...
Цитата:

И еще одно замечание: не нужно в функциях ожидания окон задавать нулевые таймауты. Смысл таймаута такой - ждать X окно не более Y секунд и в любом сл. идти дальше. При таймауте=0 будет сделана одна проверка на наличие искомого окна и сразу будет выполнена следующая функция, что также может вызвать проблемы, т.к. посылаемая комбинация клавиш передастся не в активный элемент окна, а х.з. куда (по ум. пауза для оконных операций у AutoIt составляет всего 250 мс). Для окон установщика Фара этого с головой хватает, но ведь может попасться приложение и с загаженными всяким мусором, медленно появляющимися окнами.
а "0" по моему бесконечность означает!? так что это вполне оправдано, но может быть я и не прав...

Sanja Alone 14-07-2005 02:45 340821

Izvr
Цитата:

Ну а как тогда объяснить то, что я могу набрать в Run far и он у меня откроется?
Да уж, давно я дедовским способом Far не ставил... Сейчас проверил на вирт. машине - действительно он добавляет свой путь в Path. Мне только не ясно одно - зачем? Ведь если запустить Фар из Run-а, то на него без боли смотреть просто невозможно и все юзеры (любящие комформ) запускают Фар с пом. ярлыка, к-рый редактируют "под себя". Но если ты экстремал, то можешь добавлять путь Far-а к Path-у с пом. включения в архив маленькой утилки setenv.exe (35 328 байт) и батника примерно такого содержания:
Код:

@echo off
copy /y Far.lnk "%AllUsersProfile%\Application Data\Microsoft\Internet Explorer\Quick Launch\Far.lnk" > nul
regedit /S settings.reg
setenv -m PATH %PATH%;"%ProgramFiles%\Far"
exit

(Far.lnk - "настроенный" ярлык, к-рый также нужно положить в архив).
У меня из подобного файлика (ес-но, без setenv) еще и шрифт в Винду добавляется для понимания Фаром укр. буковок.
И пусть тебя не беспокоят "лишние" файлы в каталоге установленного Фара. Если Фар придется когда-нибудь удалять (в сязи с острым приступом тоталкоммандеризма или еще чего-то пострашнее) то заставить Фар удалить и эти файлы можно просто дописав их имена в файл Uninstall.lst в каталоге Фара.

Цитата:

а "0" по моему бесконечность означает!?
Бесконечность означает отсутствие данного параметра, а 0 означает именно то, что я написал выше.

Madcap 14-07-2005 11:39 340904

Sanja Alone
Ты неправ, 0 означает бесконечность.
Попробуй запусти 2 нехитрых скрипта:

Код:

WinWait ("Название окна","Текст", 1)
Sleep (300)
MsgBox ( 0, "12345", "12345")

и

Код:

WinWait ("Название окна","Текст", 0)
Sleep (300)
MsgBox ( 0, "12345", "12345")


Izvr 14-07-2005 17:37 341019

Цитата:

Да уж, давно я дедовским способом Far не ставил... Сейчас проверил на вирт. машине - действительно он добавляет свой путь в Path. Мне только не ясно одно - зачем? Ведь если запустить Фар из Run-а, то на него без боли смотреть просто невозможно и все юзеры (любящие комформ) запускают Фар с пом. ярлыка, к-рый редактируют "под себя". Но если ты экстремал, то можешь добавлять путь Far-а к Path-у с пом. включения в архив маленькой утилки setenv.exe (35 328 байт) и батника примерно такого содержания:
Я создаю решение не для себя, а для работы. Так что мне пофиг, кому надо настроят. А вообще я пользуюсь консолькой, поэтому набрать far для меня проще, чем тыкаться в ярлык. За утилитку спасибо.

Sanja Alone 15-07-2005 01:36 341099

Madcap
Да, так и есть: WinWait ("Название окна","Текст", 0) дает такой же результат, как и WinWait ("Название окна","Текст"). Ну что тут сказать - такие выкрутасы должны быть описаны в справке. А там только сказано, что это "Timeout in seconds" и никаких ремарок (Remarks - None). Камень в огород писателей :) справки к AutoIt.

ched3n 15-07-2005 11:55 341176

могет совместно над чем нить поработаем
хотя .... о чем это я

Madcap 15-07-2005 14:25 341217

to all

Такая командочка:
Код:

if WinWaitActive ( "Окно1", "") or ( "Окно2", "") then
...

Неработает оператор or. Если появляется "Окно1" - все ОК скрипт продолжает выполняться.
Если появляется "Окно2" - то скрипт висит.
Что я делаю неправильно?

Sanja Alone 16-07-2005 04:03 341381

Madcap
Цитата:

Что я делаю неправильно?
Почти все :) Ты пытаешься связать логическим условием функцию и текст в скобках. А нужно делать так:
Код:

if WinWaitActive ( "Окно1", "") or WinWaitActive ( "Окно2", "") then
P.S. Все директивы AutoIt - это функции, а в скобки заключаются передаваемые им параметры.

Madcap 18-07-2005 10:47 341849

Sanja Alone
Все равно не работает :( тоже самое что и раньше - второе окно не хочет искать.
Вот у меня маленький скриптик который, по идее, должен определить какое из двух видов окошек открылось

Код:

if WinWaitActive ( "Калькулятор", "") or WinWaitActive ( "Безымянный - Блокнот", "") then
if WinExists ( "Калькулятор", "") then
MsgBox ( 0, "1", "Калькулятор")
else
MsgBox ( 0, "1", "блокнот")
endif
endif

но он не хочет работать. Может у меня руки кривые? Ткни пжлста пальцем где я еще обшибся.

Sanja Alone 19-07-2005 03:56 342075

Madcap
Гм, а тут ничего и не может работать - у функций ожидания окон таймауты равны бесконечности :)
Рабочий вариант должен использовать другие функции (мгновенной проверки):
Код:

While 1=1
  if WinExists ( "Калькулятор" ) and WinExists ( "Безымянный - Блокнот" ) then
      MsgBox ( 0, "1", "Оба окна существуют" )
    ElseIf WinExists ( "Калькулятор" ) and Not WinExists ( "Безымянный - Блокнот" ) then
      MsgBox ( 0, "1", "Калькулятор" )
    ElseIf Not WinExists ( "Калькулятор" ) and WinExists ( "Безымянный - Блокнот" ) then
      MsgBox ( 0, "1", "Блокнот" )
    Else
      ;если убрать это сообщение, то скрипт будет вести себя тихо при отсутствии окон
      MsgBox ( 0, "1", "Нет ни одного окна" )
  endif
WEnd

Или тоже самое, но другим способом:
Код:

While 1=1
  Select
    Case WinExists ( "Калькулятор" ) and WinExists ( "Безымянный - Блокнот" )
        MsgBox ( 0, "1", "Оба окна существуют")
    Case WinExists ( "Калькулятор" ) and Not WinExists ( "Безымянный - Блокнот" )
        MsgBox ( 0, "1", "Калькулятор")
    Case WinExists ( "Безымянный - Блокнот" ) and Not WinExists ( "Калькулятор" )
        MsgBox ( 0, "1", "Блокнот")
    Case Else
        ;если убрать это сообщение, то скрипт будет вести себя тихо при отсутствии окон
        MsgBox ( 0, "1", "Нет ни одного окна")
  EndSelect
WEnd

В обоих примерах важен порядок условий, т.к. каждый последующий ElseIf или Case выполняется только когда все предыдущие ложные.

Madcap 19-07-2005 08:47 342093

Sanja Alone
Честно говоря я думал что оператор or позволяет сделать проверку и с бесконечными таймаутами.
Огромное спасибо.

ЗЫ: Все таки это были кривые руки :)

bogomolv 19-07-2005 12:10 342132

Рад приветствовать единомышленников!

Уже более двух лет автоматизирую AutoIt'ом все, что можно и не можно.
Начинал, естественно, с "автокликанья" по окошкам программ-установщиков. Но сейчас мне обидно за любимый AutoIt, когда его используют исключительно в этих целях.
Мои скрипты отвечают за весь процесс установки системы, а также выполняют ряд полезных функций в текущей работе. Главное, что дал AutoIt, это более мощные и разнообразные инструменты, по сравнению с обычными батниками, и логику, по сравнению с обычными inf- и reg-файлами.

Поделюсь несколькими фирменными приемчиками.

Проверка на стадии cmdlines наличия железки и установка дров для нее:
Код:

Opt('ExpandVarStrings', 1); default = 0
.....
$iDir=        '@ScriptDir@\Up\'
$iDirDr= '@ScriptDir@\I386\$$oem$$\$$1\drivers\'
If DriveGetFileSystem(StringLeft(@ScriptDir,3))='CDFS' Then $iDirDr='@ScriptDir@\$$1\drivers\'
.....
$hwid='PCI\VEN_1002' ;ati
If hwidtest($hwid) Then
$Dr='$iDirDr$1_ati\'
RunWait('$Dr$driver\Setup.exe -s -f1"$Dr$driver\setup.iss"')
RunWait('$Dr$cpanel\Setup.exe -s -f1"$Dr$cpanel\setup.iss"')
RegDelete('HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run','ATIPTA')
RegWrite('HKLM\SOFTWARE\ATI Technologies\Desktop','EnableIcon','REG_SZ','0')
$f='$iDirDr$4_s910t\nast_color.au3'
If FileExists($f) Then StartupDrivers("RunWait('AutoIt3.exe $f$')")
EndIf
.....
Exit
.....
Func hwidtest($hwid) ;проверка наличия железки по ID
return NOT RunWait('@ComSpec@ /C devcon.exe hwids "$hwid$" | find "$hwid$"','',0)
EndFunc

Доустановка после первой загрузки Windows дров, которые "не любят" стадию cmdlines:
Код:

.....
$hwid='PCI\VEN_8086' ;INTEL
If hwidtest($hwid) Then
$hwid='PCI\VEN_8086&DEV_24DF' ;INTELSATA
If hwidtest($hwid) Then
        StartupDrivers("RunWait('$iDirDr$0_intel_sata\iaar47_multi.exe -A -S','',0)")
        StartupDrivers("DirRemove('@ProgramsCommonDir@\Intel(R) Application Accelerator',1)")
Manager','$aMenuPSS$',1)")
Else
        RunWait('$iDirDr$0_intel\iaa23_enu.exe -A -S','', 0)
        DirRemove('@ProgramsCommonDir@\Intel Application Accelerator',1)
EndIf
EndIf
.....
Exit
.....
Func StartupDrivers($l)
$file = FileOpen('C:\startupdrivers.au3', 1)
FileWriteLine($file, $l)
FileClose($file)
EndFunc

Создание Подключений и соответствующих Учетных записи OutLook через IPS-файл на основе данных пользователя (файл internet.ini)
Код:

.....
$ini= 'ПУТЬ\internet.ini'
$ins= '%temp%\ispcnfg.ins'
$con= IniReadSectionNames($ini)
For $i=1 to $con[0]
IspCnfg_ins()
Run(@ComSpec&' /C Start %temp%\ispcnfg.ins','',0)
WinWaitActive('Мастер подключения к Интернету')
Send('{ENTER}')
WinWaitActive('Мастер подключения к Интернету','Завершена подготовка')
Send('{ENTER}')
Next
.....
Exit
.....
Func IspCnfg_ins() ;создание ispcnfg.ins, создающего соединение
$f = FileOpen($ins, 2)
FileWriteLine($f, '[Entry]')
FileWriteLine($f, 'Entry_Name='& $con[$i])
FileWriteLine($f, '')
FileWriteLine($f, '[Phone]')
FileWriteLine($f, 'Dial_As_Is=yes')
FileWriteLine($f, 'Phone_Number='& IniRead($ini, $con[$i],'Phone_Number',''))
FileWriteLine($f, 'Area_Code=8452')
FileWriteLine($f, 'Country_Code=7')
FileWriteLine($f, 'Country_ID=7')
FileWriteLine($f, '')
FileWriteLine($f, '[Device]')
FileWriteLine($f, 'Type=modem')
FileWriteLine($f, '')
FileWriteLine($f, '[Server]')
FileWriteLine($f, 'Type=PPP')
FileWriteLine($f, 'SW_Compress=yes')
FileWriteLine($f, 'Network_Logon=no')
FileWriteLine($f, 'Negotiate_TCP/IP=yes')
FileWriteLine($f, 'Negotiate_NetBEUI=No')
FileWriteLine($f, 'Negotiate_IPX/SPX=No')
FileWriteLine($f, '')
FileWriteLine($f, '[TCP/IP]')
FileWriteLine($f, 'Specify_IP_Address=no')
FileWriteLine($f, 'Specify_Server_Address=yes')
FileWriteLine($f, 'IP_Header_Compress=yes')
FileWriteLine($f, 'Gateway_On_Remote=yes')
FileWriteLine($f, 'DNS_Address='& IniRead($ini, $con[$i],'DNS_Address',''))
FileWriteLine($f, 'DNS_Alt_Address='& IniRead($ini, $con[$i],'DNS_Alt_Address',''))
FileWriteLine($f, '')
FileWriteLine($f, '[User]')
FileWriteLine($f, 'Name='& IniRead($ini, $con[$i],'Name',''))
FileWriteLine($f, 'Password='& IniRead($ini, $con[$i],'Password',''))
FileWriteLine($f, 'Display_Password=no')
FileWriteLine($f, '')
FileWriteLine($f, '[ConnectionSettings]')
FileWriteLine($f, 'ApplyInsToConnection='&$con[$i])
FileWriteLine($f, '')
If IniRead($ini, $con[$i],'Email_Name','')<>'' Then
FileWriteLine($f, '[Internet_Mail]')
FileWriteLine($f, 'SMTP_Server='& IniRead($ini, $con[$i],'SMTP_Server',''))
FileWriteLine($f, 'POP_Server='& IniRead($ini, $con[$i],'POP_Server',''))
FileWriteLine($f, 'Domain=') ;sample.net
FileWriteLine($f, 'Install_Mail_16=0')
FileWriteLine($f, 'Email_Name='& IniRead($ini, $con[$i],'Email_Name',''))
FileWriteLine($f, 'Email_Address='& IniRead($ini, $con[$i],'Email_Address',''))
FileWriteLine($f, 'POP_Logon_Name='& IniRead($ini, $con[$i],'POP_Logon_Name',''))
FileWriteLine($f, 'POP_Logon_Password='&IniRead($ini, $con[$i],'POP_Logon_Password',''))
FileWriteLine($f, '')
EndIF
FileClose($f)
EndFunc

Где файл internet.ini имеет следующий вид
Код:

[ИМЯ_СОЕДИНЕНИЯ1]
Phone_Number=
Phone_Number2=
Name=
Password=
DNS_Address=
DNS_Alt_Address=
SMTP_Server=
POP_Server=
Email_Name=
Email_Address=
POP_Logon_Name=
POP_Logon_Password=
[ИМЯ_СОЕДИНЕНИЯ2]
.....


Для перевода reg-файлов в коды AutoIt написал простенький макрос для Word:
Код:

Sub ОбработкаREG()
 
With Selection
If .Start = .End Then ActiveDocument.Select
Set myRange = .Range
 
'удаление лишнего
Замена "( ){1;}", "\1", True
Замена "^p ", "^p", False
Замена "\^p", "", False
Замена "\\", "\", False
Замена "HKEY_CURRENT_USER", "HKCU", False
Замена "HKEY_LOCAL_MACHINE", "HKLM", False
 
'обработка строк
For Each aPara In myRange.Paragraphs
aPara.Range.Select: .End = .End - 1
If Left(.Text, 1) = ";" Then
ElseIf Left(.Text, 1) = "[" Then
        hkey = Mid(.Text, 2, InStr(.Text, "]") - 2)
        .End = .End + 1
        .Text = ""
ElseIf InStr(.Text, "=") Then
        kkey = Mid(.Text, 2, InStr(2, .Text, Chr(34)) - 2)
        If InStr(.Text, "dword") Then
        tkey = "REG_DWORD"
        zkey = Mid(.Text, InStr(.Text, "=") + 7)
        zkey = Trim(Str(Val("&h" + zkey)))
        ElseIf InStr(.Text, "hex") Then
        tkey = "REG_BINARY"
        zkey = Mid(.Text, InStr(.Text, "=") + 5)
        zkey = Replace(zkey, ",", "")
        zkey = UCase(zkey)
        Else
        tkey = "REG_SZ"
        zkey = Mid(.Text, InStr(.Text, "=") + 2)
        zkey = Replace(zkey, Chr(34), "")
        End If
        .Text = "RegWrite('" + hkey + "','" + kkey + "','" + tkey + "','" + zkey + "')"
End If
Next
 
myRange.Select
End With
End Sub
 
Sub Замена(a, b, s)
Set SRange = Selection.Range
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Execute FindText:=a, ReplaceWith:=b, Replace:=wdReplaceAll, Wrap:=wdFindStop, MatchWildcards:=s
End With
SRange.Select
End Sub

Буду рад, если что-нибудь кому-нибудь пригодится...

boss911 19-07-2005 19:57 342241

Всем привет! У меня вопрос, так как нехотел создавать еще одну тему! У меня есть скрипт "Lan XP SP2.vbs". Что он делает: запускает "Мастер настройки сети" и настраивает локальную сеть, но после настройки лок. сети открывает автоматом общий доступ к папке "Общие документы" (SharedDocs)
Код:

Set WshShell = WScript.CreateObject("WScript.Shell")
On Error Resume Next
WshShell.Run ("%SystemRoot%\system32\rundll32.exe hnetwiz.dll,HomeNetWizardRunDll")
WScript.Sleep 1000
WshShell.SendKeys "{ENTER 2}"
WScript.Sleep 100
WshShell.SendKeys "{DOWN}"
WScript.Sleep 100
WshShell.SendKeys "{ENTER}"
WScript.Sleep 100
WshShell.SendKeys "{DOWN 2}"
WScript.Sleep 100
WshShell.SendKeys "{ENTER}"
WScript.Sleep 100
WshShell.SendKeys "Sergey"
WScript.Sleep 20
WshShell.SendKeys "{ENTER}"
WScript.Sleep 100
WshShell.SendKeys "MSHOME"
WScript.Sleep 20
WshShell.SendKeys "{ENTER}"
WScript.Sleep 100
WshShell.SendKeys "{UP}"
WScript.Sleep 100
WshShell.SendKeys "{ENTER 2}"
WScript.Sleep 12000
WshShell.SendKeys "{DOWN 3}"
WScript.Sleep 100
WshShell.SendKeys "{ENTER 2}"
WScript.Sleep 100

Так вот можно ли в этот скрипт прописать такую вещь с командной строки, котороя закрывает общий доступ к ней - "net share SharedDocs %userprofile%\Документы /delete". Как должна эта команда выглядеть в моем скрипте? И можно ли этот скрипт выполнить с cmdlines.txt, сработает ли он на 13-12 минуте до окончания установки Windows XP SP2? Спасибо!!!
Код:

[COMMANDS]
useraccounts.cmd
"Lan XP SP2.vbs"


DenchikK 21-07-2005 12:42 342646

Не выходит установить Agnitum Outpost 2.7 через AutoIt: не закрывается последнее окно, где спрашивается
про перезагрузку компа. На это окно вообще ничего не действует. Подскажите пожалуйста, как же с этим можно справиться.
Вот мой скрипт:

Код:


Run('setup.exe')

WinWaitActive ('Select Language')
Send('{TAB 3}{DOWN 5}')
ControlClick ('Select Language','','Button2')

WinWaitActive ('Приветствуем')
ControlClick ('Приветствуем','','Button1')

WinWaitActive ('Лицензионное соглашение')
ControlClick ('Лицензионное соглашение','','Button3')
ControlClick ('Лицензионное соглашение','','Button1')

WinWaitActive ('Read Me файл')
ControlClick ('Read Me файл','','Button1')

WinWaitActive ('Выберите папку для установки')
ControlClick ('Выберите папку для установки','','Button1')

WinWaitActive ('Начало копирования файлов')
ControlClick ('Начало копирования файлов','','Button1')

WinWaitActive ('Создать новую конфигурацию')
ControlClick ('Создать новую конфигурацию','','Button6')

WinWaitActive ('Мастер конфигурации')
ControlClick ('Мастер конфигурации','','Button6')

WinWaitActive ('Ручная настройка')
ControlClick ('Ручная настройка','','Button8')

WinWaitActive ('Установка','Необходимо перезагрузить компьютер для завершения установки.')
ControlClick ('Установка','Необходимо перезагрузить компьютер для завершения установки.','Button3')

Exit


bogomolv 21-07-2005 18:54 342746

DenchikK

Попробуй "WinKill" или "ProcessClose".

Sanja Alone 22-07-2005 02:24 342811

DenchikK
Рабочий скрипт для установки Agnitum Outpost 2.7
Код:

AutoItSetOption("TrayIconHide", 1)
BlockInput ( 1 )
AutoItSetOption ( "SendKeyDelay", 15 )
Run ( 'OutpostProInstall.exe' )
WinWaitActive ( 'Select Language' )
ControlCommand ( 'Select Language', '', 'ListBox2', 'SelectString', 'Russian' )
If @error=1 Then
    ControlCommand ( 'Select Language', '', 'ListBox1', 'SelectString', 'Russian' )
EndIf
Send ( '{ENTER}' )
WinWaitActive ( 'Приветствуем' )
Send ( '{ENTER}' )
WinWaitActive ( 'Лицензионное соглашение' )
ControlClick ( 'Лицензионное соглашение', '', 'Button3' )
Send ( '{ENTER}' )
WinWaitActive ( 'Read Me файл' )
Send ( '{ENTER}' )
WinWaitActive ( 'Выберите папку для установки' )
Send ( '{ENTER}' )
WinWaitActive ( 'Начало копирования файлов' )
;Создать программную группу для текущего пользователя
Send ( '{ENTER}' )
;выбрать вариант "Создать программную группу для всех пользователей"
;ControlClick ( 'Начало копирования файлов', '', 'Button5' )

WinWaitActive ( 'Создать новую конфигурацию' )
;Автоматическая настройка
Send ( '{ENTER}' )
;или Ручная настройка
;ControlClick ( 'Создать новую конфигурацию', '', 'Button2' )

WinWait ( 'Мастер конфигурации' )
AutoItSetOption("MouseCoordMode", 2)
;без этой паузы не хочет работать дальше (реально нужно 20-30 сек., но для тестов на VMWare пришлось поставить больше)
Sleep ( 60000 )
WinActivate ( 'Мастер конфигурации' )
;Далее
MouseClick( "left", 400, 330, 1, 0 )
WinWaitActive ( 'Ручная настройка' )
Send ( '{ENTER}' )
WinWaitActive ( 'Установка' )
Send ( '{ESC}' )
Sleep ( 50 )
;лекарство и настройки
RunWait ( 'opst_ui.exe' )
RunWait ( 'settings.exe' )
Sleep ( 50 )
;перенос ярлыков
DirCopy ( @ProgramsDir & '\Agnitum\Outpost Firewall', @ProgramsCommonDir & '\Сеть\Agnitum Outpost Firewall', 1 )
DirRemove ( @ProgramsDir & '\Agnitum', 1 )
;если имеете рабочий ключ, то введите его сюда
;RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Agnitum\Outpost Firewall","Key","REG_SZ","XXX...XX")
;отключить Автообновление

RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Agnitum\Outpost Firewall\General","AutoUpdate","REG_DWORD","00000000")
;убрать Аутпост из автозапуска (кому нужно)
;RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "Outpost Firewall")

BlockInput ( 0 )


DenchikK 27-07-2005 20:49 344000

bogomolv
Sanja Alone
Спасибо огромное! Я, кстати, разобрался, отчего у меня не работал скрипт - в окне Создать Конфигурацию я нажимал - автоматическая, и при установке AutoIT'ом почему-то сразу пропускался мастер и сразу выдавалось последнее окно. С этим то я разобрался.
Родился новый вопрос, может быть подскажете: для автоматизации работы нужно запустить несколько приложений и брать оттуда некоторые данные. добавлять в другие и.т.д. Проблема в том, что прочитав справку и форум по AI, я так и не нашёл, возможно ли точно переходить в конкретнозаданное запущенное окно. А то метод Alt+Tab не всегда срабатывает.
Заранее спасибо.

Sanja Alone 28-07-2005 01:12 344041

DenchikK
Цитата:

я так и не нашёл, возможно ли точно переходить в конкретнозаданное запущенное окно
Activates (gives focus to) a window - WinActivate ( "title" [, "text"] )

bogomolv 28-07-2005 08:08 344058

DenchikK
Sanja Alone

Без "WinActivate()", конечно, не обойтись.
Но можно оперировать вводом-выводом, и не активируя соответствующие окна:
Код:

$GetSN=ControlGetText('keygen', 'RU', 'Edit1')
ControlSetText('ABBYY', 'Введите серийный номер', 'Edit1', $GetSN)


vserd 28-07-2005 15:40 344168

bogomolv
Цитата:

ABBYY
Ну ты и монстр!!!! :)))) Давно думал как можно автоматизировать это безобразие, а ты как фокусник слона из кармана вытянул.
СПАСИБО!!!


UncleGluk 28-07-2005 18:00 344209

Все супер! И AutoIt просто не заменимая вещь! Как я до него жил - ума не приложу.. :) Так же не могу понять как собственно мне получить код возврата кнопки "ОК" или "Cancel" при использовании функции MsgBox???
Допустим, что-то типа:

MsgBox (1, "", "Запускать? ")

и необходимо обработать нажатие кнопки, и дальше отправить по условию, как это можно сделать, кто нибудь подскажет?
Спасибо!

bogomolv 28-07-2005 22:48 344267

vserd

Рабочий скрипт немного сложнее:
Код:

While Not WinExists('Мастер Активации')
ControlClick('keygen', 'RU', 'Button4')
$GetSN=ControlGetText('keygen', 'RU', 'Edit1')
ControlSetText('ABBYY', 'Введите серийный номер', 'Edit1', $GetSN)
ControlClick('ABBYY', 'Введите серийный номер', 'Button1')
WinWait('Мастер Активации','',5)
WinClose('ABBYY', 'Проверьте правильность')
Wend

UncleGluk

Если кто-то:) открыл бы AutoIt.chm, то без труда там нашел:
Код:

If MsgBox (1, "", "Запускать? ")<>1 Then Exit

Sanja Alone 29-07-2005 02:15 344301

bogomolv
Цитата:

можно оперировать вводом-выводом, и не активируя соответствующие окна
Спрашивали не об этом - я отвечал на прямой вопрос.
А о том, что ты говоришь - я знаю, но без активации оно не всегда должным образом работает :(
Да, ты мне напомнил - я пару месяцев назад для знакомого делал автоустановку ABBYY FineReader 7.
Выкладываю для народа:
Код:

AutoItSetOption("TrayIconHide", 1)
BlockInput ( 1 )
Global $InstPath, $Serial, $InstID, $FFCode, $ActCode, $ACStr
AutoItSetOption ( "SendKeyDelay", 20 )
;запуск кейгена
Run ( 'keygen.exe' )
WinWaitActive ( 'Abbyy FineReader Professional v7.0 keygen' )
;страна - UA (для RU - удалить один ControlClick)
ControlClick ( 'Abbyy FineReader Professional v7.0 keygen', '', 'Button3' )
ControlClick ( 'Abbyy FineReader Professional v7.0 keygen', '', 'Button3' )
ControlClick ( 'Abbyy FineReader Professional v7.0 keygen', '', 'Button3' )
ControlClick ( 'Abbyy FineReader Professional v7.0 keygen', '', 'Button3' )
Sleep ( 600 )
$Serial = ControlGetText ( 'Abbyy FineReader Professional v7.0 keygen', '', 'Edit1' )
Sleep ( 70 )
;установка программы
Run ( 'setup.exe /L1049' )
WinWait ( 'ABBYY FineReader 7.0 Professional Edition - ', 'Лицензионный договор' )
WinActivate ( 'ABBYY FineReader 7.0 Professional Edition - ', 'Лицензионный договор' )
ControlCommand ( 'ABBYY FineReader 7.0 Professional Edition - ', 'Лицензионный договор', 'Я &принимаю условия лицензионного договора', "Check", "" )
Send ( '{ENTER}' )
WinWait ( 'ABBYY FineReader 7.0 Professional Edition - ', 'Режим установки' )
WinActivate ( 'ABBYY FineReader 7.0 Professional Edition - ', 'Режим установки' )
$InstPath = ControlGetText ( 'ABBYY FineReader 7.0 Professional Edition - ', 'Режим установки', 'RichEdit20W1' )
;по ум., путь = C:\Program Files\ABBYY FineReader 7.0 Professional Edition\
Выборочная установка. Выбрана только для подключения еще и англ. языка интерфейса - мужик хотел совсем "полную" установку.
Кому нужно, на этом этапе можно отключить FormFiller (после получения фокуса элементом SysTreeView321 нажать {DOWN 5}, !{DOWN}, {UP} и {ENTER} ).
Для обычной установки сразу жать Button1 и идти к
STD
ControlClick ( 'ABBYY FineReader 7.0 Professional Edition - ', 'Режим установки', 'Button5' )
;Далее
ControlClick ( 'ABBYY FineReader 7.0 Professional Edition - ', 'Режим установки', 'Button1' )
WinWait ( 'ABBYY FineReader 7.0 Professional Edition - ', 'Выборочная установка' )
WinActivate ( 'ABBYY FineReader 7.0 Professional Edition - ', 'Выборочная установка' )
ControlFocus ( 'ABBYY FineReader 7.0 Professional Edition - ', 'Выборочная установка', 'SysTreeView321' )
Send ( '{DOWN}' )
Send ( '{RIGHT}' )
Send ( '{DOWN}' )
Send ( '!{DOWN}' )
Send ( '{DOWN}' )
Send ( '{ENTER}' )
Sleep ( 70 )
;Далее
Send ( '{ENTER}' )
;STD
WinWaitActive ( 'ABBYY FineReader 7.0 Professional Edition - ', 'Подключение к каналу новостей ABBYY' )
ControlCommand ( 'ABBYY FineReader 7.0 Professional Edition - ', 'Подключение к каналу новостей ABBYY', 'H&ет', "Check", "" )
Sleep ( 50 )
Send ( '{ENTER}' )
WinWaitActive ( 'ABBYY FineReader 7.0 Professional Edition - ', 'Установка программы' )
Send ( '{ENTER}' )
WinWaitActive ( 'ABBYY FineReader 7.0 Professional Edition - ', 'Установка ABBYY FineReader 7.0 завершена' )
Send ( '{ENTER}' )
Sleep ( 50 )
;регистрация программы
Run ( $InstPath & 'FineReader.exe' )
WinWaitActive ( 'ABBYY FineReader 7.0 Professional Edition Try&Buy', 'Вы работаете с испытательной версией программы' )
ControlCommand ( 'ABBYY FineReader 7.0 Professional Edition Try&Buy', 'Вы работаете с испытательной версией программы', '&Ввести серийный номер', "Check", "" )
Send ( '{ENTER}' )
WinWaitActive ( 'ABBYY FineReader 7.0 Professional Edition Try&Buy', '&Введите серийный номер' )
ControlSetText ( 'ABBYY FineReader 7.0 Professional Edition Try&Buy', '&Введите серийный номер', 'Edit1', $Serial )
Send ( '{ENTER}' )
WinWaitActive ( 'Мастер Активации ABBYY FineReader 7.0 Professional Edition', 'Мастер активации последовательно проведет Вас по всему процессу' )
ControlCommand ( 'Мастер Активации ABBYY FineReader 7.0 Professional Edition', 'Мастер активации последовательно проведет Вас по всему процессу','по &факсу или телефону', "Check", "" )
Send ( '{ENTER}' )
WinWaitActive ( 'Мастер активации ABBYY FineReader 7.0 Professional Edition', 'Активация по факсу или телефону' )
;для России Ukraine замените на Russia
ControlCommand ( 'Мастер активации ABBYY FineReader 7.0 Professional Edition', 'Активация по факсу или телефону', 'ComboBox1', "SelectString", 'Ukraine' )
$InstID = ControlGetText ( 'Мастер активации ABBYY FineReader 7.0 Professional Edition', 'Активация по факсу или телефону', 'Edit2' )
;переход в окно кейгена
WinActivate ( 'Abbyy FineReader Professional v7.0 keygen' )
Sleep ( 30 )
ControlSetText ( 'Abbyy FineReader Professional v7.0 keygen', '', 'Edit3', $InstID )
Sleep ( 70 )
;Generate
ControlClick ( 'Abbyy FineReader Professional v7.0 keygen', '', 'Button8' )
Sleep ( 50 )
$FFCode = ControlGetText ( 'Abbyy FineReader Professional v7.0 keygen', '', 'Edit2' )
$ActCode = ControlGetText ( 'Abbyy FineReader Professional v7.0 keygen', '', 'Edit4' )
Sleep ( 50 )
WinClose ( 'Abbyy FineReader Professional v7.0 keygen' )
WinWaitClose ( 'Abbyy FineReader Professional v7.0 keygen' )
Sleep ( 20 )
WinActivate ( 'Мастер активации ABBYY FineReader 7.0 Professional Edition', 'Активация по факсу или телефону' )
;из кейгена код получен одной строкой вида x-x-x..., а вводить нужно по частям в разные поля - разделяем.
$ACStr = StringSplit ( $ActCode, "-" )
Sleep ( 350 )
ControlSetText ( 'Мастер активации ABBYY FineReader 7.0 Professional Edition', 'Активация по факсу или телефону', 'Edit4', $ACStr[1] )
ControlSetText ( 'Мастер активации ABBYY FineReader 7.0 Professional Edition', 'Активация по факсу или телефону', 'Edit5', $ACStr[2] )
ControlSetText ( 'Мастер активации ABBYY FineReader 7.0 Professional Edition', 'Активация по факсу или телефону', 'Edit6', $ACStr[3] )
ControlSetText ( 'Мастер активации ABBYY FineReader 7.0 Professional Edition', 'Активация по факсу или телефону', 'Edit7', $ACStr[4] )
ControlSetText ( 'Мастер активации ABBYY FineReader 7.0 Professional Edition', 'Активация по факсу или телефону', 'Edit8', $ACStr[5] )
ControlSetText ( 'Мастер активации ABBYY FineReader 7.0 Professional Edition', 'Активация по факсу или телефону', 'Edit9', $ACStr[6] )
ControlSetText ( 'Мастер активации ABBYY FineReader 7.0 Professional Edition', 'Активация по факсу или телефону', 'Edit10', $ACStr[7] )
Sleep ( 30 )
Send ( '{ENTER}' )
WinWaitActive ( 'Мастер активации ABBYY FineReader 7.0 Professional Edition', 'Активация успешно завершена' )
Send ( '{ENTER}' )
Sleep ( 500 )
;это окно иногда появляется, а иногда нет.
(Тестил и на VMWare и на 2 реальных ПК - закономерности найти не пытался, а просто впаял эту проверку. Работает... и ладушки.)

If WinExists ( 'Регистрация FineReader 7.0 Professional Edition', 'Пожалуйста' ) Then
      WinActivate ( 'Регистрация FineReader 7.0 Professional Edition', 'Пожалуйста' )
      Send ( '{SPACE}' )
      ControlClick ( 'Регистрация FineReader 7.0 Professional Edition', 'Пожалуйста', 'Button4' )
      WinWaitActive ( 'Регистрация', 'Внимание!' )
      Send ( '{ENTER}' )
EndIf
WinWait ( 'Добро пожаловать!' )
WinActivate ( 'Добро пожаловать!' )
;&Закрыть
ControlClick ( 'Добро пожаловать!', '', 'Button5' )
;активировать и закрыть основное окно программы
WinActivate ( 'Пакет без имени - ABBYY FineReader 7.0 Professional Edition' )
WinClose ( 'Пакет без имени - ABBYY FineReader 7.0 Professional Edition' )
WinWaitClose ( 'Пакет без имени - ABBYY FineReader 7.0 Professional Edition' )
Sleep ( 50 )
;активация FormFiller-а
Run ( $InstPath & 'FormFiller.exe' )
WinWaitActive ( 'Активация' )
ControlSetText ( 'Активация', '', 'Edit1', $FFCode )
Sleep ( 70 )
;&Активация
ControlClick ( 'Активация', '', 'Button1' )
WinWait ( 'Форма - ABBYY FormFiller' )
WinActivate ( 'Форма - ABBYY FormFiller' )
WinClose ( 'Форма - ABBYY FormFiller' )
WinWaitClose ( 'Форма - ABBYY FormFiller' )
Sleep ( 20 )
;перенос ярлыков
DirCopy ( @ProgramsCommonDir & '\ABBYY FineReader 7.0', @ProgramsCommonDir & '\Офис\ABBYY FineReader 7.0', 1 )
DirRemove ( @ProgramsCommonDir & '\ABBYY FineReader 7.0', 1 )
;Поддержка украинского языка для FineReader 7.0
;(пакет перепакован в winrar-sfx архив для тихой установки)
;команды SFX-сценария (для winrar-архива):
;  Setup=setup.exe /L1049
;  TempMode
;  Silent=1
;  Overwrite=1

RunWait ( 'ukr.exe' )
$FFCode = 0
$InstPath = 0
$Serial = 0
$InstID = 0
$ActCode = 0
$ACStr = 0
BlockInput ( 0 )

P.S. Возможно, здесь не все оптимально, но работает без проблем.
Сама прога бралась отсюда (43 749 965 байт)
Укр. язык (1 639 936 байт) - может кому и нужен :)

bogomolv 29-07-2005 09:57 344349

Sanja Alone

С интересом познакомился с использованием функции StringSplit(). Даже не знал о ее существовании.

По оптимизации кода:
а) пару десятков строк можно сэкономить, используя вместо Run('setup.exe /L1049') команду RunWait('setup.exe /L1049 /v/qb');
б) в одном случае из 10 введенный серийник оказывается неверным. Поэтому "зацикливаю" его ввод (см. пример);
в) для настройки установленного FineRеader можно включить в скрипт RunWait('regedit /s FineRеader.reg') и FileCopy($iDir&'Untitled.fbt', $pDir, 1).

Общие вопросы:
б) зачем обнулять переменные на выходе из скрипта?
в) категорически не согласен с использованием BlockInput(). Отлаженный скрипт может быть неожиданно прерван на чужой машине выскочившим окошком какого-либо сообщения Windows об отсутствующих дровах и т.п. Что делать в этом случае? То же самое относится и к Opt('TrayIconHide',1). Наоборот всегда включаю Opt('TrayIconDebug',1), чтобы можно было понять, чего ждет "зависший" скрипт.

UncleGluk 29-07-2005 12:49 344391

bogomolv

Ой! :blush: да я не думал что все так просто! Начал чего то выдумывать и совсем потерялся, уйдя от правильной мыслишки!

Спасибо!

Sanja Alone 30-07-2005 04:07 344653

bogomolv
Цитата:

С интересом познакомился с использованием функции StringSplit()
Мне приятно, что мои 5 месяцев зканомства с AutoIt не прошли уж совсем зря...

Цитата:

пару десятков строк можно сэкономить
Угу, но я ведь делал установку НЕ с параметрами по умолчанию.

Цитата:

в одном случае из 10 введенный серийник оказывается неверным
Ни разу такого не было - FR7 за все время раз 20 ставил, а SoundForge6 (там вообще привязка ключа к аппаратной конфигурации) уже раз 40-50 (причем, с BatchConverter-ом и регистрацией MPEG1/2-плагина). Наверное, хорошие кейгены попадались :)

Цитата:

для настройки установленного FineRеader
Если не затруднит - пришли мне на мыло FineRеader.reg и Untitled.fbt и расшифруй смысл переменных $iDir и $pDir (у меня своего сканера нет, а последний FR, к-рый я юзал, был еще версии 4.х). Это не для себя делалось...

Цитата:

зачем обнулять переменные на выходе из скрипта?
Обнуляются для освобождения памяти, хотя при нынешних объемах ОЗУ в типичных ПК это и не актуально... И изначально это был не выход - там еще путь в Path добавлялся :)

Цитата:

Отлаженный скрипт может быть неожиданно прерван на чужой машине выскочившим окошком какого-либо сообщения Windows об отсутствующих дровах и т.п. Что делать в этом случае?
Ctrl+Alt+Del, открывается TaskManager и блокировка при этом снимается - не знал?

Цитата:

всегда включаю Opt('TrayIconDebug',1), чтобы можно было понять, чего ждет "зависший" скрипт.
Может я так и сделаю, просто не люблю я лишних иконок в трее :) И для многократно проверенных скриптов это излишество.

bogomolv 30-07-2005 16:24 344728

Sanja Alone

Про установку не "по умолчанию".
А что не "по умолчанию" ты устанавливаешь? Как правило, все можно потом задействовать/отключить через реестр.
Например, новостной канал отключается удалением ключа "FineReader7NewsReaderPro" в ветке HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run.

Про FineRеader.reg и Untitled.fbt.
Эти файлы воспроизводят личные пользовательские настройки.
Настриваешь FR, сохраняешь через меню "Опции" в Untitled.fbt, копируешь.
Незапоминаемые Untitled.fbt настройки интерфейса находим в реестре (ветка HKCU\Software\ABBYY\FineReader\7.00) и сохраняем в FineRеader.reg.
Есть ли нужда пересылать их? Там все из разряда "мне так нравится".

Про переменные $iDir и $pDir.
Это имена папок "откуда и куда" идет установка. А ты что подумал?

Про серийник.
Иногда и 30 раз проходит с первого раза. А иногда через раз начинает ругаться, что неверный.
М.б. это проблема конкретной версии...

Про Ctrl+Alt+Del и BlockInput(0).
Я знаю. Знаю и то, что не надо трогать мышь и клавиатуру во время работы скрипта. Так от кого эта защита?
А вот людей, которые потом будут этим пользоваться, вряд ли стоит пугать зависшим компьютером.

Sanja Alone 31-07-2005 02:46 344837

bogomolv
Про не "по ум." - англ. язык интерфейса, я это написал в комментариях к скрипту. И я не думаю, что тут поможет реестр, т.к. отсутствующий компонент посредством реестра не включится :)

Цитата:

Есть ли нужда пересылать их? Там все из разряда "мне так нравится".
Мне было бы интересно посмотреть пример, я же сказал, что последним активно используемым FR-ом для меня был еще 4.х.

Про переменные $iDir и $pDir - я понял что это, но не понял два момента:
- можно ведь просто написать FileCopy('Untitled.fbt', $pDir, 1), или у тебя скрипты лежат в каком-то отдельном каталоге?
- куда пихать тот самый Untitled.fbt. Это ведь может быть не только каталог проги, но и что-нить типа Doc&Set\Имя_юзера\AppData\Abbyyy_блаблабла или ты и это станешь оспаривать?

Цитата:

А вот людей, которые потом будут этим пользоваться, вряд ли стоит пугать зависшим компьютером.
Есть 2 больших категории юзеров - первые вообще боятся нажать случайно какую-нибудь кнопку (эти устанавливать проги сами не будут), а остальные знают про "комбинацию из трех пальцев".

Цитата:

Так от кого эта защита?
От тех, кто любит трогать :)

bogomolv 31-07-2005 12:57 344872

Sanja Alone

Про установку не "по умолчанию".
Такие вещи, на мой вгляд, лучше задавать непсредственно в установщике, либо отредактировав msi-файл, либо создав для него mst-файл дополнительных настроек установки.
Использую для этого Orca (MSI Table Editor). С его помощью записал то, что тебе нужно, в full.mst (запускается FineReader.msi /qb TRANSFORMS=full.mst).
Вышлю вместе с другими файлами, когда ответишь по мылу.

Про пути.
$pDir=@ProgramFilesDir&'\ABBYY FineReader 7.0 Professional Edition\'
$iDir=@ScriptDir&'\'. Но это сейчас, когда пакую все файлы дистрибутива и настроек в SFX RAR архив. Раньше было по-другому.

Про 2 больших категории юзеров.
Так к какой категории относятся те, кто любит трогать?:)

DenchikK 02-08-2005 05:11 345307

Наверное всё-таки напишу в эту тему, так как в теме об установке WinAmp обсуждается немного не то.

О наболевшем. Об установке WinAmp. Хочется сделать её универсальной - в том смысле, чтоб скрипт AutoIT срабатывал всегда, а не только в случае установки на чистую (или не чистую) систему. Загвоздка в том, что WinAmp при установке, в зависимости от системы, задаёт РАЗНЫЕ вопросы - и естественно скрипт может не сработать. Первая вещь, на которой иногда спотыкается установка - это вопрос о регистрации. Победилась просто - перед установкой reg файлом вносятся необходимые регистрационные данные. Но есть второй подводный камень - на чистой системе задаётся вопрос о перезапуске, на системе, в которой уже стоял WinAmp - этот вопрос не задётся. Как бы сделать обход этого - например оператором IF, чтоб скрипт, если не появилось окно с вопросом о регистрации, дальше продолжал свою работу, а если появится - отмнил бы перезагрузку ну и проч. по плану?

И ещё один вопрос, правда не очень в тему: на второй странице Sanja Alone сказал, что образы от Virtual CD монтируются Алкоголем. Я сам уже давно на Алкоголь перешёл, но есть куча образов от VCD. Обрадовался - попробовал - не вышло - Алкоголь правильно распознаёт размер, но не может считать информацию. Образы от VCD 4.5, Алкоголь: 3 последних.

Sanja Alone 03-08-2005 02:51 345550

DenchikK
Цитата:

Как бы сделать обход этого - например оператором IF
А какие проблемы?
Код:

If WinExists ( 'Имя', 'Текст' ) Then
        ;код, выполняемый если окно появилось
      Else
        ;код, выполняемый если окна не было
EndIf

(Тоже самое можно сделать и с пом. Select...Case...EndSelect)


По поводу регистрации - раз уж установка делается скриптом, то пусть и регистрация делается им же (и без "лишнего" reg-файла):
Код:

RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Nullsoft\Winamp", "regname", "REG_SZ", "xxxxxxxxxxxxx")
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Nullsoft\Winamp", "regkey", "REG_SZ", "xxxxxxxxxxxxxxxxxxxxxxxx")

Цитата:

Sanja Alone сказал, что образы от Virtual CD монтируются Алкоголем
Алкоголь у меня тогда был 1.4.8.1222, а более новые версии ведут себя так, как ты и описал. Выход есть - переконвертировать *.vcd/*.000-образы с пом. UltraISO во что-нибудь стандартное (например, iso). Но и здесь возможны проблемы. С былых времен у меня осталось только 3 образа VCD - два монтируются (но не дают считать содержимое) новым Алкоголем, при этом они не загружаются в UltraISO, но без лишних вопросов конвертируются последним в нормально читаемые iso. А третий образ vcd/000 вообще ничем кроме родного VirtualCD не монтируется и не конвертируется. Такие вот дела...

DenchikK 04-08-2005 02:22 345815

Никак не могу всё-таки справиться с winamp : установка происходит нормально, только не в первый раз. Вот привожу пример того, что наваял:
Код:

Run('setup.exe')
 
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Nullsoft\Winamp", "regname", "REG_SZ", "***")
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Nullsoft\Winamp", "regkey", "REG_SZ", "***")
 
WinWaitActive ('Winamp Setup','License Agreement')
ControlClick ('Winamp Setup','License Agreement','I &Agree')
 
WinWaitActive ('Winamp Setup','Choose Components')
ControlSend ('Winamp Setup','Choose Components','SysTreeView321','{End}{Up 2}{Space}{UP 5}{Space}{Enter}')
 
WinWaitActive ('Winamp Setup','Choose Install Location')
ControlClick ('Winamp Setup','Choose Install Location','&Next >')
 
WinWaitActive ('Winamp Setup','Choose Install Options')
ControlClick ('Winamp Setup','Choose Install Options','&Next >')
 
WinWaitActive ('Winamp Setup','Internet Connection and Language Settings')
Send ('{Down 2}{Tab 5}{Enter}')
 
WinWaitActive ('Winamp Setup','Interface and Skin Selection')
ControlClick ('Winamp Setup','Interface and Skin Selection','&Install')
 
; Вот здесь и наступает непонятка: после нажатия на кнопку инстал (строчка выше) открывается следующее окно, где и идёт процесс установки, не закрывается, выскакивает новое окно с вопросом о перезагрузке. После нажатия “нет” – всё закрывается, winamp даже не запускается. Так вот, при выскакивании этого окна с запросом, ничего не происходит. Я явно не понял, как этот оператор работает.
 
If WinExists ( 'Winamp Setup', 'A reboot is required to complete the installation' ) Then
 
WinWaitActive ('Winamp Setup','A reboot is required to complete the installation.')
ControlClick ('Winamp Setup','A reboot is required to complete the installation','Button2')
 
ProcessWaitClose("winamp.exe")
 
Run('ENHANCER.EXE')
 
WinWaitActive ('Enhancer 0.17')
ControlClick ('Enhancer 0.17','','Next >')
 
Sleep ( 1000 )
 
ProcessWaitClose("'ENHANCER.exe")
 
run ('rus.exe')
 
Else
 
sleep ( 3500 )
 
;WinWaitActive ('Player Window')
;sleep ( 1000 )
 
WinWaitActive ('Add Media to Library')
WinActivate ('Add Media to Library')
Send ('{Tab 2}{Enter}')
WinWaitClose("Add Media to Library", "", 5)
 
sleep ( 1000 )
 
run ('taskkill.exe /F /IM winamp.exe')
 
ProcessWaitClose("winamp.exe")
 
Run('ENHANCER.EXE')
 
WinWaitActive ('Enhancer 0.17')
ControlClick ('Enhancer 0.17','','Next >')
 
Sleep ( 1000 )
 
ProcessWaitClose("'ENHANCER.exe")
 
run ('rus.exe')
 
EndIf
 
Exit


VelDmi 04-08-2005 07:13 345835

DenchikK
А ты не пробовал версию winamp.msi? C ней таких проблем нет.

Madcap 04-08-2005 08:32 345852

2 DenchikK
На сколько я понял оператор WinExists проверяет наличее окна только 1 раз, в твоем случае сразу после нажатия клавиши
Цитата:

ControlClick ('Winamp Setup','Interface and Skin Selection','&Install')
когда окно
Цитата:

'Winamp Setup'
еще не появилось.
Внимательно почитай посты на 4 странице, там Sanja Alone растолковывал мне как определить какое именно окно открылось. Это должно подойти и тебе.

DenchikK 05-08-2005 00:42 346021

Слегка получилось со скриптом для winamp (и новый робоформ построил на его основе), только работает странно - скрипт не закрывается, приходится вызывать taskkill - что не есть гуд. И вторая неприятная вещь - я выставил таймаут для нормальной работы скрипта - боюсь что на других компах может и не сработать.

И заодно бы хотел спросить про функцию проверки отметки чекбокса. Примерно в половине программ она не срабатывает. Это нормально, или я что-то не так делаю? Там где не срабатывает, есть отличительная черта: не совпадение надписи на чекбоксе с тем, что выдаёт AutoIT

Пример: Offline Explorer 3.8, Recovery My Files 3.70.

А вот так например сработало для FastStone:
Код:

ControlCommand ( 'FastStone Image Viewer', 'Completing the FastStone Image', 'Button4', 'UnCheck', '' )

Sanja Alone 08-08-2005 03:16 346568

DenchikK
Цитата:

Примерно в половине программ она не срабатывает. Это нормально, или я что-то не так делаю?
Почти со стопроцентной уверенностью могу сказать, что все несрабатывающие используют установщик Inno Setup. Ничего не поделаешь - подводи куда нужно курсор и Send('{SPACE}')

bogomolv 08-08-2005 22:19 346739

DenchikK

Начну с самоцитаты из своего первого поста:
"Мне обидно за любимый AutoIt, когда его используют исключительно в этих [автокликанье] целях".

На другом ресурсе (где мы с тобой уже встречались) был предложен достаточно простой и быстрый(!) способ автоустановки WinAmp путем копирования свежеустновленной программы и ее данных в реестре.
Установка WinAmp (и большинства других программ) автокликаньем имеет огромный недостаток - зависит от версии программы. В результате с выходом каждой новой версии любимой программы, как правило, приходится переписывать autoit-скрипты , что со временем изрядно надоедает. Поэтому советую обращаться к AutoIt лишь тогда, когда другие средства установки неприменимы.
Способ установки копированием реестра также зависит от версии. Но все отличия, скорее всего, будут локализованы в одной-двух отвечающих за настройки программы ветках реестра, которые можно элементарно скопировать целиком и заменить в соответствующем reg-файле.
К тому же при этом способе часто удается использовать "скрытые" возможности самой программы. Например, простое копирование mplayerc.exe можно сопроводить RunWait(@ProgramFilesDir&'\Media Player Classic\mplayerc.exe /regvid') и зарегистристрировать таким образоом на Media Player Classic расширения видеофайлов. Остается добавить в реестр некоторые свои любимые настройки программы и - ву-аля.
Интересная комбинация может получаться при синтезе нескольких способов установки. Например, в папку $oem$\$Progs\WinRAR можно положить не развернутую копию программыных файлов, а только два из них - Settings.reg (сохраненные из самого WinRAR настройки) и rarreg.key (лицензионный ключ). Тогда для автоустановки WinRAR достаточно будет двух команд
RunWait ('regedit /s "@ProgramFilesDir@\WinRAR\Settings.reg"') и RunWait ('@ScriptDir@\wrar35b7ru.exe /S') (именно в этой последовательности!).

Относительно же твоих вопросов о том, почему в кокретном случае не срабатывает та или иная команды или не закрывается то или иное окно, на них ответить трудно. Для этого под рукой нужно иметь твою программу в той версии, которую ты мучаешь и т.д. Да и обсуждение, вряд ли для кого-нибудь, кроме тебя лично, будет представлять интерес. А раз так, тебе самому и решать возникающие проблемы - перебирай по очереди различные способы слежения за окнами в AutoIt (только параметром Opt('WinTitleMatchMode', 1-4) можно задать 4 таких способа), пробуй все известные способы нажимания на кнопки (различные Control, Send (особенно Send('горячая клавиша'), MouseClick), читай и перечитывай AutoIt.chm...

Sanja Alone
Цитата:

Почти со стопроцентной уверенностью могу сказать, что все несрабатывающие используют установщик Inno Setup.
А вот это уже значительно более интересный аспект темы, поднятой DenchikK.
В продолжение начатого с ним разговора могу напомнить, что у установщика INNO SETUP есть ключ /COMPONENTS="comma separated list of component names", так что можно вполне обойтись silent-установкой без чекбоксов.
При юзании устновщиков INNO SETUP можно также сохранить параметры ручной установки ключом /SAVEINF="filename", а потом воспроизводить их через /LOADINF="filename".

DenchikK 09-08-2005 01:15 346770

bogomolv

Цитата:

Начну с самоцитаты из своего первого поста:
"Мне обидно за любимый AutoIt, когда его используют исключительно в этих [автокликанье] целях".
Может, вы и правы, но для меня пока нет задачи, кроме автокликанья, для которой мне мог бы понадобиться AutiIT. Появятся такие задачи – более полно раскроется для меня и AutoIT. Специально то я не буду искать такие задачи. Так что с этим всё очень просто.

Цитата:

На другом ресурсе (где мы с тобой уже встречались) был предложен достаточно простой и быстрый(!) способ автоустановки WinAmp путем копирования свежеустновленной программы и ее данных в реестре.
Знаю, но меня пока ни один из известных способов не устраивает, и этот метод меня не устраивает в первую очередь. Если посмотреть программой, отслеживающий изменения в системе, то можно увидеть, что изменений, относящихся к winamp насчитывается почти 2 тысячи! И каждый раз, как выходит новая версия опять заниматься отловом записей реестра, файлов и проч. (WinAmp ещё и кодаки ставит – и отдельно их отыскивать и регистрировать) – это полный геморрой. Хотя бы попробуйте экспортировать из реестра ключи, отвечающие за регистрацию расширений – обещаю – надоест очень быстро! Так что это способ отвергается сразу.

Цитата:

Поэтому советую обращаться к AutoIt лишь тогда, когда другие средства установки неприменимы.
Вот потому и пользуюсь AutoIT только в крайних случаях, мои приоритеты просты:
1. Ключи
2. Rar SFX
3. AutoIT

Цитата:

Да и обсуждение, вряд ли для кого-нибудь, кроме тебя лично, будет представлять интерес
C эти то же не согласен. Многим пользователям будет очень полезно
прочитать, как можно решить анологичную проблему. Программы меняются - а принцип решения может быть одинаковым.


Цитата:

пробуй все известные способы нажимания на кнопки (различные Control, Send (особенно Send('горячая клавиша'), MouseClick), читай и перечитывай AutoIt.chm...
Что я и делаю, прежде чем обратиться на форум.

Цитата:

В продолжение начатого с ним разговора могу напомнить, что у установщика INNO SETUP есть ключ
Далеко не все программы работают с этими 2 способами.

Madcap 09-08-2005 10:45 346849

Цитата:

Многим пользователям будет очень полезно
прочитать, как можно решить анологичную проблему. Программы меняются - а принцип решения может быть одинаковым.
Полностью согласен. ИМХО после прочитывания данной темы у многих начинающих "писателей" скриптов :) отпадет большая часть вопросов.

Такой вопрос. Как можно кликнуть на скрытую кнопку?
Код:


Control ID: 12325
ClassNameNN: Button7
Text:  Готово
(Control is hidden)

send ("{enter}") нехочется, потому что долго подводить курсор, а можно ли ControlClick-ом?

bogomolv 09-08-2005 14:13 346910

DenchikK
Во-первых, в интернете, как и в бане, все равны. Так что, не "выкай" (и тем более не делай это с маленькой буквы - я один!).
Во-вторых, ну и зачем ты это написал? Не хочешь слушать - не слушай. Я ж все равно не проверю, как ты реализушь мои бесценные наставления! А по содержанию твой пост - сугубо личное послание-оправдание. Для этого есть почтовый ящик.:)


DenchikK & Madcap

Цитата:

Многим пользователям будет очень полезно прочитать, как можно решить анологичную проблему. Программы меняются - а принцип решения может быть одинаковым.
Полностью согласен. ИМХО после прочитывания данной темы у многих начинающих "писателей" скриптов отпадет большая часть вопросов.
И я полностью согласен, что нужно обсуждать ПРИНЦИПЫ. Поэтому и пишу.
Вы же обсуждаете, "можно ли кликнуть на скрытую кнопку" или "как бы сделать обход этого - например оператором IF". Кто ж за вас это сделает? Вот и попробуйте кликнуть на скрытую кнопку или сделать обход оператором IF. А результаты доложите...:)

biork 13-08-2005 12:42 347883

Всем привет.
Аналогичная проблемка. Иногда выскакивает окошко, иногда нет. В случае, когда оно есть - скрипт удачно доходит до конца. В случае, когда окошка нет - не происходит отработки ветки "Else". Что не так?

Код:

Run("ezAntivirus.exe")
 
;BlockInput(1)
 
WinWaitActive("License Agreement", "")
ControlClick("License Agreement", "", "CUST:BUTTON2")
 
WinWaitActive("Installation Location", "")
ControlClick("Installation Location", "", "CUST:BUTTON2")
 
If WinExists ("Update Message", "") Then
WinWaitActive ("Update Message", "")
ControlClick("Update Message", "", "CUST:BUTTON2")
 
WinWaitActive ("Scan", "")
ControlClick("Scan", "", "CUST:BUTTON1")
ControlClick("Scan", "", "CUST:BUTTON1")
 
WinWaitActive("Restart Required", "")
WinClose("Restart Required", "")
 
Else
 
WinWaitActive ("Scan", "")
ControlClick("Scan", "", "CUST:BUTTON1")
ControlClick("Scan", "", "CUST:BUTTON1")
 
WinWaitActive("Restart Required", "")
WinClose("Restart Required", "")
 
EndIf
 
Exit


biork 13-08-2005 13:05 347890

Цитата:
Ничего не поделаешь - подводи куда нужно курсор и Send('{SPACE}')

Воспользовался этим нехитрым методом:

Код:

...
WinWaitActive("Drive Image 2002 Setup", "Select the features you want to install")
ControlFocus ( "Drive Image 2002 Setup", "", "SysTreeView321")
MouseClick( "left", 443, 471, 1)
ControlFocus ( "Drive Image 2002 Setup", "", "Button2")
Send("!n")
...

Работает! Но... только на моём компе, когда тестирую скрипт.
При запуске на виртуальной машине или другом компьютере стрелка уезжает совсем не в то место, где нужно кликнуть

bogomolv 14-08-2005 01:56 347983

biork

По MouseClick.
Вместо этой команды Tab'ом подведи к кусор к кнопке и кликни ее. Что-то вроде Send({Tab}{Enter}).

По неожиданным окошкам.
Не знаю конкретной проблемы, но в общем случае для неожиданных окон и любых других нежелательных оказий в AutiIt есть чудная процедура AdlibEnable('Имя функции').
Пример. На стадии cmdlines иногда выскакивает сообщение о заканчивающейся виртуальной памяти. Для его погашения в cmdlines.au3, отрабатывающем все действия на данной стадии, задаем функцию NonVMEM
Код:

AdlibEnable('NonVMEM')
...
обычные действия
...
Exit
 
Func NonVMEM()
If WinExists('Слишком мало виртуальной памяти') Then WinKill('Слишком мало виртуальной памяти')
EndFunc


Sanja Alone 14-08-2005 03:01 347993

biork
Если сильно хочется MouseClick-нуть, то сначала обрати внимание на опцию
Код:

Opt("MouseCoordMode", 1)        ;1=absolute, 0=relative, 2=client
По умолчанию, привязка идет к левому верхнему углу экрана (1), а тебе нужно привязаться к активному окну (0) или к клиентской части активного окна (2). В AutoIt Window Info эти режимы находятся здесь: Options - Coord Mode.

Sanja Alone 15-08-2005 02:24 348126

Я написал простенький конвертер для перевода reg-файлов в директивы AutoIt (RegWrite и RegDelete).
Конвертер понимает все типы параметров (известные AutoIt-у), поддерживает удаление веток/параметров.
Параметры типов REG_RESOURCE_LIST (hex(8)), REG_FULL_RESOURCE_DESCRIPTOR (hex(9)), REG_RESOURCE_REQUIREMENTS_LIST (hex(a)), REG_QWORD (hex(b)), а также неправильные параметры типа DWORD (hex(4)) пропускаются.

Ограничения: не понимает Unicode, т.е. исходные reg-файлы должны быть в DOS или Win кодировках (REGEDIT4).
Особенности: медленная работа с большими файлами (675Кб ветка HKLM\SYSTEM\CurrentControlSet\Services, выбранная для теста, обрабатывается 4,5 мин. на AXP-1500MHz). Я не считаю этот момент проблемой, т.к. конвертер предназначен не для преобразования реестра, а для дополнения AutoIt-скриптов установок прог их настройками из reg-файлов.

Кому нужен - прошу
Если при использовании столкнетесь с какими-то недоработками - мыльните.

Кроме того, скрипты установки н-рых программ находятся на этой странице.

P.S. Исправил проблемы с \\, \", одинарными кавычками внутри параметров ('), двоеточиями в названиях параметров, параметрами по умолчанию (@), символами равно внутри строковых параметров.

bogomolv 15-08-2005 19:03 348268

Sanja Alone

Well job!

Geck 20-08-2005 10:07 349440

Люди подскажите пожалуйста как можно из экселевской таблички скопировать данные (количество строк не фиксированное, столбцы фиксированные)?

bogomolv 21-08-2005 08:56 349589

Geck

Обработать xls-файл вряд-ли удастся - слишком сложная структура файла.
А вот обработать окно с открытой таблицей легко - через Send('^{Ins}) или ControlGetText().

Geck 21-08-2005 10:31 349596

bogomolv
Спасибо... А как можно определить когда данные закончатся?
Можно конечно вручную править количество повторов в цикле, но это не выход.


Geck 21-08-2005 10:32 349597

bogomolv
Кстати через ControlGetText() не получается, только через Send

demo369 23-08-2005 17:30 350149

Добрый вечер
Вопрос по поводу скрипта от Lingvo
Сдела папочку Lingvо, сложил туда все нужные файлики:
/vfd
AutoIt3.exe
ling10me_flp.IMA
lingvo.au3
lingvo.exe
LV10ML.iso
Запускаю
AutoIt3.exe lingvo.au3
Доходит до принятия лицензионного соглашения и виснет.
Причем стоит точка на отказе принятия лицензионного соглашения
Может где-нибудь в скрипте ошибка?

Я так понимаю ошибка должна быть здесь:
ControlClick ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Лицензионный договор', 'Button3' )
Такой функции не нашел в описании. AutoIT 3.1.1

Sanja Alone 30-08-2005 02:09 351855

demo369
Цитата:

Запускаю AutoIt3.exe lingvo.au3
В принципе, так тоже должно работать, т.к. я применял макрос @ScriptDir в путях, но я всегда использую откомпилированные в exe скрипты, а данный вариант запуска установки Lingvo не тестировал вовсе.

Цитата:

Может где-нибудь в скрипте ошибка?
Пару десятков раз проверял на VMWare и 2 раза на реальных компах - все было ОК.
Почему скрипт может не работать:
1. Не выполнен пункт 4 оригинального поста - Alcohol или Daemon ни разу не запускались.
2. Другой дистрибутив Lingvo и, следовательно, отличные от приведенных в скрипте названия окон, текст в окнах, названия эл-тов (ну не Button3, а Button2, например), другое имя msi-файла в корне исошки Lingvo и т.п.

Для выяснения точной причины, добавь в начало скрипта строку Opt("TrayIconDebug",1), а также закомментируй AutoItSetOption("TrayIconHide", 1) и BlockInput ( 1 ). Запусти скрипт снова, и, когда он зависнет, наведи мышь на иконку AutoIt-а в трее и увидишь причину зависания.

Цитата:

Такой функции не нашел в описании. AutoIT 3.1.1
Плохо искал: ControlClick ( "title", "text", controlID [, button] [, clicks]] ). При просмотре chm-ки, для более удобного поиска, переключайся на закладку "Указатель" и там вводи то, что ищешь. При этом работает автодополнение и ты быстро найдешь искомую функцию.

P.S. Извини за неоперативный ответ - я только вчера купил новую интернет-карточку.

EgOrus 30-08-2005 17:13 352038

Здравствуйте товарищи, радует что тема растет и множится.
Написал скрипт для автоматизации процесса скидывания CD и DVD дисков на HDD (мне нужно было скинуть большое количество фильмов).

Так вот вопрос такой, хотелось бы сделать прогрэсбар для наглядности, но каким образом обновлять его, что-то не представляю. Вернее есть решение, считывать объем инфы кот. уже скопировалась и сравнивать с общим объемом компакт диска, но это работает только в случае копирования мелких фалов, при копировании фильма индикатор с 1% будет прыгать на 100%. Есть ли какое-то решение?

Код:

; Скрипт полностью автоматизирует процесс копирования, от пользователя требуется
; только вставлять диски и задвигать лоток. Скипт написан для запуска из Total Commander,
; но можно использовать и самостоятельно.
; В верхнем левом углу выводит инф. о текущем действии скрипта.
; Пример запуска:
cdcopy.exe [CD] [Destination]
cdcopy.exe X: D:\Video или cdcopy X "D:\Video store"
cdcopy.exe "%P" "%T" из TC 

;-----------------------------------------------------------

Opt('ExpandVarStrings', 1)
Opt('TrayIconDebug',1)

;Назначение переменных из командной строки
$cmd1 = $CmdLine[1]
$cmd2 = $CmdLine[2]

;Приведение переменных к нужному виду
If StringLen($cmd1) = 1 Then $cmd1 = "$cmd1$:"
If StringLen($cmd2) = 1 Then $cmd2 = "$cmd2$:"
If StringLen($cmd1) > 2 Then $cmd1 = StringLeft("$cmd1$", 2)
If StringRight("$cmd2$", 1) = "\" Then $cmd2 = StringTrimRight("$cmd2$", 1)

;Завершение скрипта если нет параметров или первый параметр не явл. буквой CD(DVD)ROM'а
If $CmdLine[0] = 0 Then
  MsgBox(4096,"CD-DVD Copy script", "No command-line arguments")
  Exit
ElseIf DriveGetType("$cmd1$\") <> "CDROM" Then
  MsgBox(4096,"CD-DVD Copy script", "$cmd1$ is not a CD(DVD)ROM drive letter")
  Exit
EndIf

;Начало цикла
While 1
Sleep (1000)

;Если в приводе нет носителя, начинаем цикл сначала
If DriveStatus("$cmd1$\") == "NOTREADY" Then ContinueLoop
ToolTip(" CD mount.", 1, 1)
Sleep (500)

;Получаем объем своб.места на диске назначения и конвертируем его в gb. в случае если места больше 1024 mb.
$DestFree = DriveSpaceFree(StringLeft("$cmd2$", 2) & "\")
if $DestFree > 1024 Then
  $DestFreeGB = round (($DestFree / 1024), 2)
  $siz = "gb."
Else
  $DestFreeGB = round ($DestFree, 2)
  $siz = "mb."
EndIf

;получаем объем носителя в mb. (CD или DVD)
$SourceTotal = DriveSpaceTotal("$cmd1$\")
If $SourceTotal > 801 Then
  $media = "DVD"
Else
  $media = "CD"
EndIf

;получаем Метку диска
$CDlabel = DriveGetLabel("$cmd1$\")

;Завершение скрипта если недостаточно свободного места на диске назначения
ToolTip(" Check free space.", 1, 1)
Sleep (500)
ToolTip(" Free space: $DestFreeGB$ $siz$", 1, 1)
If $DestFree < $SourceTotal Then
    MsgBox(4096,"CD-DVD Copy script", "Not enough free space on Drive " & StringLeft("$cmd2$", 2) & " " & round($DestFree, 2) & " mb. free")
    Exit
EndIf
Sleep (1000)

;Создаем папку, куда затем будет скопирован диск
DirCreate("$cmd2$\!new\$CDlabel$")
ToolTip(" $media$ copy in progress :: $CDlabel$ :: [" & round($SourceTotal, 2) & " mb.]", 1, 1)
DirCopy("$cmd1$\", "$cmd2$\!new\$CDlabel$",1)
ToolTip(" $media$ copy complete", 1, 1)
Sleep (500)
SoundSetWaveVolume(50)
SoundPlay ( "C:\WINDOWS\Media\chimes.wav")
CDTray("$cmd1$", "open")
ToolTip(" Please mount Media in Drive $cmd1$", 1, 1)
Sleep (4000)

WEnd


demo369 30-08-2005 18:24 352057

demo369

Цитата:
Запускаю AutoIt3.exe lingvo.au3

В принципе, так тоже должно работать, т.к. я применял макрос @ScriptDir в путях, но я всегда использую откомпилированные в exe скрипты, а данный вариант запуска установки Lingvo не тестировал вовсе.

Сделал экзешник. Ситуация не поменялась ;)


Цитата:
Может где-нибудь в скрипте ошибка?

Пару десятков раз проверял на VMWare и 2 раза на реальных компах - все было ОК.
Почему скрипт может не работать:
1. Не выполнен пункт 4 оригинального поста - Alcohol или Daemon ни разу не запускались.

Пользуюсь Alcohol. Специально запускал. По идеи если его не запустить, то он и образ не должен примонтировать,а это он как раз делает.

2. Другой дистрибутив Lingvo и, следовательно, отличные от приведенных в скрипте названия окон, текст в окнах, названия эл-тов (ну не Button3, а Button2, например), другое имя msi-файла в корне исошки Lingvo и т.п.

LV10ML.iso - размер 650,170,368 байт
MSI файл как и в скрипте.
названия и кнопки такие же. смотрел через AutoIt Window Info и через IsoBuster.

Для выяснения точной причины, добавь в начало скрипта строку Opt("TrayIconDebug",1), а также закомментируй AutoItSetOption("TrayIconHide", 1) и BlockInput ( 1 ). Запусти скрипт снова, и, когда он зависнет, наведи мышь на иконку AutoIt-а в трее и увидишь причину зависания.

Просто выдает что скрипт остановлен (paused) lingvo.exe


Цитата:
Такой функции не нашел в описании. AutoIT 3.1.1

Плохо искал: ControlClick ( "title", "text", controlID [, button] [, clicks]] ). При просмотре chm-ки, для более удобного поиска, переключайся на закладку "Указатель" и там вводи то, что ищешь. При этом работает автодополнение и ты быстро найдешь искомую функцию.

Угу, нашел. Даже пробовал, добавить button и clicks. Рез-тов не дало.

P.S. Извини за неоперативный ответ - я только вчера купил новую интернет-карточку

Это не страшно ;) Спасибо что ответил.
Могу еще скриншот скинуть на окошко, на котором скрипт останавливается. Может что-нибудь прояснится.

Sanja Alone 01-09-2005 03:21 352403

demo369
Очень неудобно читать твои посты - pls, пользуйся тэгами цитат quote.

Цитата:

Просто выдает что скрипт остановлен (paused) lingvo.exe
Не просто... Наведи мышку на иконку и не нажимай клавиш, появится всплывающая подсказка на 2 строки - в первой будет имя скрипта, а во второй строка на к-рой он застопорился (что-то вроде Line 5: WinWait("Name","Text")) Причем лучше запускать au3-файл, т.к. в случае с exe не будет показан номер строки скрипта.

Цитата:

Даже пробовал, добавить button и clicks. Рез-тов не дало.
Все, что в квадратных скобках - необязательные параметры.

Что я могу еще придумать:
1. Можно заменить
Код:

WinWaitActive ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Лицензионный договор' )
; на
WinWait ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Лицензионный договор' )
WinActivate ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Лицензионный договор' )
WinWaitActive ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Лицензионный договор' )

2. Заменить
Код:

ControlClick ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Лицензионный договор', 'Button3' )
Send ( '{ENTER}' )
; на
Send ( '{UP}' )
Send ( '{ENTER}' )

3. Мешать скрипту могут различные перехватывающие нажатия клавиш проги: автопереключатели раскладки, счетчики нажатий клавиш и т.п. Тут нужно или отказаться от BlockInput(1), или убивать процесс такого приложения в памяти, например, убийство Punto Switcher-а будет выглядеть так (поместить этот код нужно в начало скрипта):
Код:

If ProcessExists ( "ps.exe" )<>0 Then
    ProcessClose ( "ps.exe" )
    ProcessWaitClose ( "ps.exe" )
EndIf


Sanja Alone 01-09-2005 04:37 352408

EgOrus
Цитата:

Вернее есть решение, считывать объем инфы кот. уже скопировалась и сравнивать с общим объемом компакт диска
Два шага:
1. Перед началом копирования определять объем свободного места на целевом диске;
2. Разность (текущий объем свободного пространства - начальный) сравнивать с общим объемом компакта.
Данные на винт ведь не 700-метровыми кусками пишутся :)

EgOrus 01-09-2005 07:29 352424

Цитата:

Цитата Sanja Alone
Два шага:
1. Перед началом копирования определять объем свободного места на целевом диске;
2. Разность (текущий объем свободного пространства - начальный) сравнивать с общим объемом компакта. Данные на винт ведь не 700-метровыми кусками пишутся

Не вижу принципиального отличия от моей схемы :) в моем варианте происходило так:
1. рассчет занимаемого места целевой папки куда ложится фильм (для диска создается отдельная папка с меткой диска)
2. сравнения полученного значения с общим объемом компакта.
Но вся заковырка в том, что данные именно 700 метровыми кусками и пишутся. Может конечно что-то в системе нужно изменить, но у меня именно так и происходит, под фильм сразу резервируется все 700 метров в самомом начале копирования, т.е. в целевой папке создается 700метровый файл.
Есть еще один вариант, копировать через @comspec copy , возможно в этом случае копирование происходит без резервирования.

Sanja Alone 02-09-2005 02:12 352640

EgOrus
Цитата:

Есть еще один вариант, копировать через @comspec copy
Стандартные средства тут не катят - copy как и xcopy резервируют пр-во перед началом копирования.
Тебе нужна xxcopy (244 527 байт) - эта вариация на тему xcopy имеет массу возможностей и копирует без предварительного резервирования места. Но потом не ругайся на обрубки файлов, если прервешь процесс :)

EgOrus 02-09-2005 08:31 352666

Sanja Alone
Да я знаю эту утилитку, но ни xxcopy ни robocopy меня не устраивают, лучше уж я пожертвую прогрессбаром, чем буду использовать сторонние утилитки. К моему удивлению на родном форуме также ничего по копированию больших файлов не придумали. Спасибо тебе за помощь.

Speed_Perm 02-09-2005 15:34 352806

Здравствуйте.

Обращаюсь за помощью. Слепил скриптик для автоматической установки программы на компьютер W2000 pro SP4 под правами опытного пользователя. Но инсталляция просит наличие прав администратора. Как бы проблема решаема с помощью RunAsSet ( ["user", "domain", "password"] . Инсталяционный пакет находится на сететвом ресурсе. Но возникает проблема:



run(‘\\Maim\install\setup.exe’)

Инсталяция запускается, но сообщает об необходимости прав администратора



а если

RunAsSet ( "Admin", @Computername, "password" )

run('\\Maim\install\setup.exe')

то выдает ошибку

Error: Unable to execute the external program.

Системе не удается найти указанный путь



если

RunAsSet ( "Admin@Computername, "password" )

run('D:\install\setup.exe')

то запускается



Подскажите причина такого глюка? Или я не правильно делаю?

biork 03-09-2005 00:54 352943

Всем привет!
В очередной раз прошу помощи у знающих и понимающих :-)
Совершенно ламерский вопрос. Как скопировать файл с CD диска на HDD в процессе выполнения скрипта?
Скрипт запускается из RunOnceEx.cmd. Оба файла, котырые нужно скопировать лежат в той же дирректории что и сам скрипт.
Вариант, приведённый ниже не срабатывает: папка создаётся, но файлы не копируются

Код:

DirCreate("D:\folder1\folder2")
FileCopy("setup.exe", "D:\folder1\folder2\*.*")
FileCopy("#readme.txt", "D:\folder1\folder2\*.*")

Однако, если запустить скрипт "вручную", непосредственно кликнув по нему, то всё ок - файлы копируются.
В чём косяк? (Все остальные команды из RunOnceEx.cmd, а так же сам скрипт, фрагмент которого приведён выше, выполняются нормально)

Sanja Alone 03-09-2005 01:56 352957

biork
Код:

FileCopy( @ScriptDir & '\setup.exe', 'D:\folder1\folder2\' )
FileCopy( @ScriptDir & '\#readme.txt', 'D:\folder1\folder2\')


Sanja Alone 03-09-2005 03:01 352964

Speed_Perm
Цитата:

run('\\Maim\install\setup.exe') то выдает ошибку Error: Unable to execute the external program.
afair, Run не понимает сетеых путей. Попробуй сначала примапить ресурс \\Maim\install при помощи функции
Код:

DriveMapAdd( "device", "remote share" [, flags [, "user" [, "password"]]] )
(фактически, это местный net use). А уже потом запускай setup.exe через
Код:

Run('X:\setup.exe')
(где X - это и есть тот самый "device").

Sanja Alone 05-09-2005 05:10 353264

Добавил скрипт для автоустановки переводчика Pragma 4.xx.xxxx.
Да, можете посмотреть на применение функции AdlibEnable() на примере этого скрипта. Все комментарии (как всегда) внутри скрипта.

bogomolv 06-09-2005 09:39 353551

Sanja Alone
Цитата:

Попробуй сначала примапить ресурс \\Maim\install при помощи функции DriveMapAdd
Недавно тоже обратил внимание на эту функцию. Понравилось, но, к сожалению, она НЕ работает под WinPE!
Там вообще с сетью постоянные заморочки. Как раз для простого и быстрого подключения из под WinPE ко второму компьютеру и пытался прикрутить эту функцию. Фиг-вам. Пришлось оставить скрипт, основанный на NET USE:
Код:

For $i=1 to 15
  $err=RunWait('net use * \\note\c /user:Богомолов')
  If $err=0 Then
    MsgBox(0,'AutoIt3','Подключение установлено!    ', 5)
    Exit
  Else
    If MsgBox(5,'AutoIt3','Попытка подключения '&$i&'. Ждите...    ', 10)=2 Then ExitLoop
  EndIF
Next
MsgBox(16,'','Подключиться не удалось. Проверьте свою сеть!    ', 10)


bogomolv 07-09-2005 00:46 353744

Продолжим разговор об интересных функциях?

Очень понравилась функция StringSplit. Особенно одно ее практическое применение, которое подсмотрел в предлагаемом для include файле File.au3. Теперь одной строчкой считываю содержимое текстового файла в массив $list=StringSplit(FileRead($f,FileGetSize($f)),@CRLF) и делаю с ним, что хочу!

В частности, функция очень пригодилась для считывания структуры каталогов драйверов OEM-установки Windows (папка $oem$\$1\drivers). Раньше приходилось следить и жестко прописывать все пути к драйверам для их автоустановки на стадии CMDLINES (CMDLINES.TXT у меня запускает CMDLINES.AU3, в котором расписан сценарий установки дров и инициализации настроек системы).
Теперь в CMDLINES.AU3 вместо многостраничного перечня действий со всеми своими и чужими драйверами (с которыми когда-либо встречался и могу встретиться еще) у меня стоит красивая конструкция:
Код:

;Установка драйверов устройств
$f=        '%temp%\1.txt'
RunWait ('%Comspec% /c dir /ad /s "c:\drivers" | find "c:\drivers\" > $f$','',0)
$dr= StringSplit(StringReplace(FileRead($f,FileGetSize($f)),' ‘®¤Ґа¦Ё¬®Ґ Ї ЇЄЁ ',''),@CRLF)
For $i=1 To $dr[0]
$drr=        $dr[$i]
$srch= FileFindFirstFile('$drr$\*_1.au3')
If $srch=0 Then RunWait('AutoIt3.exe "$drr$\'&FileFindNextFile($srch)&'"')
FileClose($srch)
Next

Данной процедурой считывается дерево каталога "c:\drivers" (куда копируются в процессе установки драйвера из $oem$\$1\drivers) и проверяется наличие скриптов с именем *_1.au3 с последующим их запуском. Файлы скриптов *_1.au3 - это мои автоустановщики дров и их настроек, которые я теперь храню вместе с дровами (а не в CMDLINES.AU3, как раньше). Не все дрова требуют наличия таких установщиков. И прекрасно! FileFindNextFile() не найдет *_1.au3 и перейдет к следующему каталогу. Есть и такие дрова, которые вообще не любят ставиться в процессе установки Windows (например, IAAraid). Обзываем скрипт их установки *_2.au3 и включаем те же девять строк в начало STARTUP.AU3, который стартует из Автозапуска при первом запуске свежеустановленной Windows (в этом файле у меня расписан сценарий автустановки программного обеспечения).
Теперь подготовка дистрибутива для установки системы на чужой машине сводится к простому копированию из архива заготовок драйверов для $oem$\$1\drivers и небольшой правке unattended.txt. Счастливому же владельцу машины достается комплект автопереустановки системы, похожий на те, что идут с ноутбуками…

Sanja Alone 07-09-2005 02:54 353759

1. Подправил скрипт для Pragma 4.x: теперь можно посмотреть на применение функции AdlibEnable(), а также опции OnExitFunc - здесь она необязательна, но уместна в кач-ве демонстрации.
2. Переписал скрипт для ABBYY FineReader 7.0: теперь 3 варианта установки, две страны (Украина, Россия), зациклен ввод серийника (действительно иногда первый сгенерированный серийник не подходит).

bogomolv
Цитата:

Очень понравилась функция StringSplit
А ты думаешь какой функцией я воспользовался при чтении файла в массив в своем конвертере crta :)
Но тут есть заковырка: если массив у тебя уже объявлен, например как $Array[1], то элемент $Array[0] - это не длина массива, а всего лишь первое внесенное значение (у меня была необходимость в предопределенном массиве в кач-ве временного хранилища многострочных hex-параметров). Для дополнения такого массива новым элементом его нужно ресайзнуть ReDim $Array[UBound($Array) + 1],а в циклах вместо For $i=1 To $Array[0] писать For $i=1 To UBound( $Array, 1 )-1.
И еще одна особенность AutoIt-а в плане работы с массивами: когда я переписал конвертер так, чтобы он использовал 2 массива (вх. и рез.), а не добавлял построчно данные в файл, он (конвертер) стал работать более чем в 3 раза медленнее (~16 мин.). Вот тебе и ОЗУ :( Самое забавное, что я еще пробовал третий вариант: построчное чтение вх. файла с такой же построчной записью результирующих строк в вых. файл - выполняется 6 с небольшим минут (против 4,5 в исх. вар-те), правда исп-ся минимум памяти. (это время конвертации моего тестового 675Кб reg-файла - ветка HKLM\SYSTEM\CurrentControlSet\Services)
Пришлось оставить исходный вариант алгоритма: читаем все в массив - определяем тип строки - составляем выходную строку - пишем в файл - повторяем до конца массива (для многострочных параметров, как я уже сказал, исп-ем доп. динамический временный массив). Ух, удалился я от темы, ну да ладно...

К вопросу о драйверах: я использую метод установки с CD. Вполне себе нормально все ставится... и без скриптов. Правда, пока приходилось ставить Винду только на VIA и nForce2-based платформы, с другими может и не так все гладко. А у тебя создается некое подобие персонифицированного для конкретной машины набора дров, или как? Алгоритм? Ты бы статью написал на эту тему, что ли...

demo369 07-09-2005 14:41 353896

Sanja Alone
Добрый день.
Не очень тут удобно редактировать письма, да не суть.
Спасибо за подсказку с функцией Opt() При ее помощи удалось найти проблему. Все дело оказалось в кодировке файла скрипта :( Русский язык не правильно воспринимался, поэтому дальше скрипт и не шел.
Прошу прощения, что отнял столько времени из-за такой глупости.

Цитата:

demo369
Очень неудобно читать твои посты - pls, пользуйся тэгами цитат quote.


Цитата:
Просто выдает что скрипт остановлен (paused) lingvo.exe

Не просто... Наведи мышку на иконку и не нажимай клавиш, появится всплывающая подсказка на 2 строки - в первой будет имя скрипта, а во второй строка на к-рой он застопорился (что-то вроде Line 5: WinWait("Name","Text")) Причем лучше запускать au3-файл, т.к. в случае с exe не будет показан номер строки скрипта.


Цитата:
Даже пробовал, добавить button и clicks. Рез-тов не дало.

Все, что в квадратных скобках - необязательные параметры.

Что я могу еще придумать:
1. Можно заменить

Код:
WinWaitActive ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Лицензионный договор' )
; на
WinWait ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Лицензионный договор' )
WinActivate ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Лицензионный договор' )
WinWaitActive ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Лицензионный договор' )

2. Заменить

Код:
ControlClick ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Лицензионный договор', 'Button3' )
Send ( '{ENTER}' )
; на
Send ( '{UP}' )
Send ( '{ENTER}' )

3. Мешать скрипту могут различные перехватывающие нажатия клавиш проги: автопереключатели раскладки, счетчики нажатий клавиш и т.п. Тут нужно или отказаться от BlockInput(1), или убивать процесс такого приложения в памяти, например, убийство Punto Switcher-а будет выглядеть так (поместить этот код нужно в начало скрипта):

Код:
If ProcessExists ( "ps.exe" )<>0 Then
ProcessClose ( "ps.exe" )
ProcessWaitClose ( "ps.exe" )
EndIf

ANGRO 11-09-2005 17:15 354739

Господа помогите с InputBox, если жмут Cancel или закрывают окно на выходе должен быть путь установки проги по умолчанию, как написать?
Всё разобрался
Код:

$answer = InputBox("Путь установки", "Куда исталлировать программу?", @ProgramFilesDir & "\PRMT6\", "", -1, -1,400,300)
If @error=1 Then
$answer =@ProgramFilesDir & "\PRMT6\"
EndIf
FileWrite("Answer.txt",$answer)


Sanja Alone 13-09-2005 06:03 355056

1. Переписал скрипт для Winamp 5.xx: теперь с исп-ем идентификатора окна и внесением н-рых настроек в winamp.ini
2. Добавил скрипты для Everest 2.xx (Ultimate/Corporate/Home) и DVD Identifier 3.x (4.x)

P.S. Таблица выбора скриптов на сайте теперь содержит инф. о версии скрипта, а также имеет возможность сортировки (применены xml+xsl+javascript). Если у кого-то не будет работать - напишите мне (указав свой браузер и его версию), т.к. тестировалось все это дело только на IE 6.0.

P.P.S. Если у Вас будет желание, то могу разместить эдесь и Ваши скрипты. Ес-но, добавив в таблицу ссылку на автора (пока в этом нет нужды, т.к. автор один - я :) )

Softwarez777 13-09-2005 15:41 355184

А для Promt 7 Expert можно сделать ?

Sanja Alone 14-09-2005 02:04 355304

Softwarez777
Цитата:

А для Promt 7 Expert можно сделать ?
Конечно, но у меня его нет, а качать с "двухбаксов" пролеченную версию на двух CD (прога + CD со словарями) мне на диалапе сложновато и оч-чень дороговато :(

SlavaS 14-09-2005 06:42 355333

EgOrus
Расскажи пожалуйста поподробнее про alc120.vbs, что и куда ложить надо и что за объект ActiveX? И про alc120.au3 что-то я пробовал и ни чего у меня не получилось, тут наверное я один такой одаренный :) что ни чего не понимаю, когда просто запускаю start C:\Test\AutoIt3.exe alc120.au3 в трэе появляется значок, а когда при установке даже в VmWare выскакивает ошибка чтения файла alc120.au3, а Alcohol продолжает устанавливаться и вылазиет мастер нового оборудования, и ничего не происходит :(, делаю все как написано в руководстве подскажи плиз что я ни так делаю.

EgOrus 15-09-2005 10:13 355645

SlavaS
во1ых, start C:\Test\AutoIt3.exe C:\Test\alc120.au3 (нужно указать путь к скрипту, иначе система ищет его в системных папках)
во2ых, какой язык системы у тебя? скрипт au3 дан для русской винды, для англ. нужно переписывать заголовки окон.
в3их, добавь в начало скрипта строку AutoItSetOption ("TrayIconDebug", 1) и если при появлении мастера нового оборудования ничего не происходит, наведи на значок "A" в трэе, он тебе покажет на какой строчке скрипт остановился, напиши эту информацию здесь, будем дальше думать (возможно что ты используешь последнюю версию Алкоголика и в нем что-то изменилось, хотя наврятли, пот. мастер нового оборудования это не алкоголиковское окно)

Кстати как ты запускаешь установку? Так:
msiexec.exe /passive /norestart /i c:\Test\setup.msi

По поводу vbs:
Сперва чтобы пользовать этим самым объектом ActiveX, нужно зарегить в системе библиотеку AutoItX.dll (есть в дистрибутиве AutoIt)
regsvr32 /s c:\Test\AutoItx.dll (предположим что ты dll'ку положил в С:\Test а вообще правильнее ложить ее в папку windows или windows\system32 - $OEM$\$$\system32)
после этого положить vbs данный на 1ой странице рядом с распакованным дистром (должен присутствовать файл setup.msi) и запустить его.

Sanja Alone 16-09-2005 03:02 355827

SlavaS
Скрипт установки Alcohol 120% 1.9.5.3105 (установка/регистрация/настройки). Комментарии смотри внутри au3-файла (скрипт подходит для любых Алкоголиков, т.к. исп-ся тихая установка).

SlavaS 16-09-2005 09:23 355874

У меня установка и регистрация проходит нормально, я не могу от мастера нового оборудования избавиться :(

EgOrus 16-09-2005 10:37 355888

SlavaS
Проверь чтобы заголовок первого окна мастера нового оборудования совпадал с первой строчкой winwait (...).
Проверять установку лучше не на виртуальной машине, а на своей, устанавливаешь если и что-то не так в процессе, удалаешь его. Правишь скрипт, потом опять запускаешь и смотришь как прошла установка, так до победного конца.

DenchikK 16-09-2005 11:30 355906

А можно ли с помощью AutoIT определить, какая винда (XP, ХP SP1, XP SP2) стоит на машине?
Идея вот в чём: в зависимости от того, какая винда стоит, подключать соответствующий BootScreen:
1. Переписать файл скрина на винт
2. Редактировать (добавить строчку) файл boot.ini (где-то я видел, как с помощью AutoIT можно редактировать файлы).

SlavaS 16-09-2005 16:49 355985

EgOrus
что-то я ни как не могу победить этот мастер нового оборудования, или скрипт не доделанный или у меня XP не тот, но в заголовке окна все совпадает.
Я вот думаю почему в твоем скрипте как только появляется мастер нового оборудования и нажимается ENTER?
Цитата:

'Ожидание окна установки SCSI адаптера
AutoIt.WinWait "Мастер нового оборудования", "", 0
AutoIt.Sleep 500
AutoIt.Send "{ENTER}"
Он ведь сначала спрашивает разрешить подключение к узлу Windows update для поиска програмного обеспечения и нужно выбрать Да, только в этот раз или Нет, не в этот раз, т.к. кнопка далее не активна, а вот потом уже нужно этот самый ENTER.

EgOrus 16-09-2005 19:54 356029

SlavaS
Понятно, у меня до устаноки софта применяются твики, в данном случае за НЕпоявление указанного тобой окна отвечает этот твик:
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\DriverSearching]
"DontSearchWindowsUpdate"=dword:00000001
"DontPromptForWindowsUpdate"=dword:00000001

Поэтому у тебя и не выходит каменный цветок...
Можешь либо применить твик, либо просто добавить в скрипт действия по закрытию этого окна. С помощью AU3Info.exe узнать название класса кнопки "нет" и использовать конструкицю типа
WinWait ("нужное окно","", 0)
Sleep(500)
'Послать в указанное окно ControlClick для кнопки НЕТ (название класса этой кнопки например Button2)
ControlClick ("Нужное окно","", "Button2")

Sanja Alone 17-09-2005 03:07 356092

DenchikK
Цитата:

А можно ли с помощью AutoIT определить, какая винда (XP, ХP SP1, XP SP2) стоит на машине?
Код:

@OSLang - Returns code denoting OS Language.  See Appendix for possible values.
@OSType - Returns "WIN32_NT" for NT/2000/XP/2003 and returns "WIN32_WINDOWS" for 95/98/Me
@OSVersion - Returns one of the following: "WIN_2003", "WIN_XP", "WIN_2000", "WIN_NT4", "WIN_ME", "WIN_98", "WIN_95"
@OSBuild - Returns the OS build number.  For example, Windows 2003 Server returns 3790
@OSServicePack - Service pack info in the form of "Service Pack 3" or, for Windows 95, it may return "B"

Цитата:

...файл boot.ini (где-то я видел, как с помощью AutoIT можно редактировать файлы).
Для ini-файлов в AutoIt-е предусмотрены спец. функции:
Код:

IniDelete ( "filename", "section" [, "key"] ) - Deletes a value from a standard format .ini file.
IniRead ( "filename", "section", "key", "default" ) - Reads a value from a standard format .ini file.
IniReadSection ( "filename", "section" ) - Reads all key/value pairs from a section in a standard format .ini file.
IniReadSectionNames ( "filename" ) - Reads all sections in a standard format .ini file.
IniWrite ( "filename", "section", "key", "value" ) - Writes a value to a standard format .ini file.

Все вышеперечисленное можно найти просто почитав оригинальный файл AutoIt.chm (а не переведенный хелп к одной из старых версий AutoIt-а).

DenchikK 17-09-2005 06:56 356103

Спасибо огромное! Просто с английским у меня дико плохо - вот и юзаю перевод, а он оказывается не полный.

Sanja Alone 18-09-2005 01:29 356255

Добавил скрипты:
Adobe Photoshop CS (Photoshop 8.0)
BetterJPEG 1.4.1.2
DivX Pro 5.1.1 GAIN Bundle Codec
Foxit PDF Reader 1.3 (Build 0708)
Get File Size 2.2
Mozilla Thunderbird 1.0.6

Поправил/дописал:
DivX Pro 6.0 Bundle Codec (Create)
Image Dupeless 1.6.1 (ru/en)

bogomolv 19-09-2005 00:07 356404

Sanja Alone

Ты памятник себе воздвигаешь себе нерукотворный?
К нему не зарастет народная тропа!

Маладес!

Хотел бы подмазаться. Но, блин, как же это тяжело думать о других...

Ну и типа - by the way!
Други, впервые встретился с проблемой, что НЕ МОГУ ввести латинскую "D"!
Всегда решал эту проблему "русского языка" Autoit (под WinXP Rus) с помощью ClipPut('D')... Send('+{INS}') или ControlSetText(''...','...','...','D'). Но DSKPROBE.EXE (этот Василий Алибабаевич!) не воспринимает ничего, прямого direct push!

bogomolv 19-09-2005 00:23 356408

Sanja Alone
Сань, признавая и уважая... Но как же мы по-разному думаем!
Вместо autoit-foxitpdf.au3 у меня в ...\$oem$\$Progs\FoxitReader лежат FoxitReader.exe и foxitpdfreader.reg. В CmdLines.au3 при этом есть запись RunWait ('regedit /s "@ProgramFilesDir@\FoxitReader\foxitpdfreader.reg"')

Sanja Alone 19-09-2005 02:54 356422

bogomolv
Цитата:

НЕ МОГУ ввести латинскую "D"!
Chr(68) пробовал?

Цитата:

Хотел бы подмазаться.
А какие проблемы, я же недавно предлагал всем желающим присоединяться. Если есть что-то, чего не жалко раздать всем и нашару - прошу. Авторства я себе присваивать не собираюсь, честность - мой порок :)

Цитата:

Но, блин, как же это тяжело думать о других...
Альтруизм - врожденная неизлечимая болезнь. Если с этим родился, с этим и помрешь. Я даже в игрушках всегда играю за хороших...

Цитата:

Но как же мы по-разному думаем!
Ес-но, одинаково мыслящие люди - это уже роботы :) На нашей Окраине политики любят называть таких биомассой. Ужасное, но предельно точное определение из уст мерзких лицемерных существ...
Цитата:

Вместо autoit-foxitpdf.au3 у меня в ...
У меня программы ставятся с отдельного DVD (на основе WPI), к тому же я не люблю установку прог через $oem$ - тогда уж лучше юзать sfx-архивы. Возьмем, например мой любимый Far - я никогда не буду его ставить скриптом, а только через sfx. Да и скрипты я стараюсь делать с расчетом на простых юзеров.

SlavaS 19-09-2005 09:21 356466

EgOrus
Спасибо твик помог, все получилось :)

bogomolv 19-09-2005 22:33 356698

Sanja Alone
Цитата:

Chr(68) пробовал?
Обижаешь, начальник!

bogomolv 19-09-2005 22:38 356699

Sanja Alone
Цитата:

к тому же я не люблю установку прог через $oem$
"Какие Ваши доказательства?" (с) Красная жара

Sanja Alone 20-09-2005 02:25 356748

bogomolv
Цитата:

"Какие Ваши доказательства?" (с) Красная жара
Жаль, что ты не можешь передать акцент, с к-рым была произнесена эта фраза :) А "доказательства" мои простые: опять же приведу в кач-ве примера Far. Что мы имеем: более тысячи файлов общим объемом в 16 с лишним мегабайт. Через $oem$ с CD/DVD это дело будет очень долго копироваться, постоянно дергая диск по причине большого к-ва мелких файлов, а из sfx-а ставится за несколько секунд. Хотя, метод $oem$ вполне приемлем для установки программ с малым к-вом файлов, таких, как упомянутый выше FoxitPDFReader. И ес-но, $oem$-метод лишен смысла при установке приложений НЕ с диска с Виндой - мой случай.
Цитата:

В огороде бузина, а в Киеве Sanja Alone?
Я продолжу: За те я тебе полюбив, що на руцi перстень маеш... Эта поговорка употребляется с целью показать человеку, что он говорит о несвязанных между собой вещах, порет чушь. Я же говорил о предпочитаемом мной способе установки, так же, как ты о способе $oem$. Ты бы лучше что-то по сути твоей нелюбви к sfx сказал, а не пытался меня обидеть.

P.S. На будущее: если хочется сказать мне какую-то гадость, то для этого есть e-mail. Иначе можно форум превратить в подобие одной известной fido-конференции, в к-рой от банальных перепалок перешли к межнациональным словесным войнам. Какое-то время это даже было забавно читать, потом стало скучно, а в рез-те эху снесли с бона...

VelDmi 20-09-2005 07:38 356779

bogomolv
Цитата:

Вместо autoit-foxitpdf.au3 у меня в ...\$oem$\$Progs\FoxitReader лежат FoxitReader.exe и foxitpdfreader.reg
Хорошая программа да еще и установки не требует. А как ассоциировать файлы с расширением pdf с этой программой?

EgOrus 20-09-2005 09:58 356815

VelDmi
добавь в свой foxitpdfreader.reg (не забудь поменять пути если у тебя другий):
Код:

; Foxit PDF Reader
[HKEY_CLASSES_ROOT\.pdf]
@="FoxitReader.Document"
"Content Type"="application/pdf"

[HKEY_CLASSES_ROOT\FoxitReader.Document]
@="PDF Document"
"BrowseInPlace"="1"

[HKEY_CLASSES_ROOT\FoxitReader.Document\DefaultIcon]
@="C:\\PROGRA~1\\PDFREA~1\\FOXITR~1.EXE,1"

[HKEY_CLASSES_ROOT\FoxitReader.Document\DocObject]
@="0"

[HKEY_CLASSES_ROOT\FoxitReader.Document\protocol\StdFileEditing\server]
@="C:\\PROGRA~1\\PDFREA~1\\FOXITR~1.EXE"

[HKEY_CLASSES_ROOT\FoxitReader.Document\protocol\StdFileEditing\verb\0]
@="&Edit"

[HKEY_CLASSES_ROOT\FoxitReader.Document\shell\open\command]
@="\"C:\\PROGRA~1\\PDFREA~1\\FOXITR~1.EXE\" \"%1\""

[HKEY_CLASSES_ROOT\FoxitReader.Document\shell\print\command]
@="C:\\PROGRA~1\\PDFREA~1\\FOXITR~1.EXE /dde"

[HKEY_CLASSES_ROOT\FoxitReader.Document\shell\print\ddeexec]
@="[print(\"%1\")]"

[HKEY_CLASSES_ROOT\FoxitReader.Document\shell\printto\command]
@="C:\\PROGRA~1\\PDFREA~1\\FOXITR~1.EXE /dde"

[HKEY_CLASSES_ROOT\FoxitReader.Document\shell\printto\ddeexec]
@="[printto(\"%1\",\"%2\",\"%3\",\"%4\")]"

или сокращенный вариант
Код:

; Foxit PDF Reader
[HKEY_CLASSES_ROOT\.pdf]
@="FoxitReader.Document"
"Content Type"="application/pdf"

[HKEY_CLASSES_ROOT\FoxitReader.Document]
@="PDF Document"
"BrowseInPlace"="1"

[HKEY_CLASSES_ROOT\FoxitReader.Document\DefaultIcon]
@="C:\\PROGRA~1\\PDFREA~1\\FOXITR~1.EXE,1"

[HKEY_CLASSES_ROOT\FoxitReader.Document\DocObject]
@="0"

[HKEY_CLASSES_ROOT\FoxitReader.Document\shell\open\command]
@="\"C:\\PROGRA~1\\PDFREA~1\\FOXITR~1.EXE\" \"%1\""

bogomolv
Sanja Alone
стоит ли из-за таких пустяков ссориться, у каждого свои любимые методы и вкусы, а о вкусах как известно не спорят

bogomolv 20-09-2005 10:44 356822

Sanja Alone
Цитата:

метод $oem$ вполне приемлем для установки программ с малым к-вом файлов
Золотые слова. Именно поэтому через \$oem$\$Progs у меня устанавливаются только 5 из 30 "автоустанавливаемых" программ. Установка остальных программ идет, как правило, через SFX-архив, содержащий дистрибутив программы, файлы ее настроек и скрипты автоустановки...
О чем спорим?

EgOrus
Считаю полезным также прописывать регистрацию pdf-файла на FineReader:
Код:

;Открыть с помощью FineReader
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\FoxitReader.Document\shell\Open With FineReader]
@="Открыть с помощью FineReader"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\FoxitReader.Document\shell\Open With FineReader\Command]
@="\"C:\\Program Files\\ABBYY FineReader 7.0 Professional Edition\\FineReader.exe\" \"%1\""
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\FoxitReader.Document\shell\Open With FineReader\ddeexec]
@="Open(\"%1\")"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\FoxitReader.Document\shell\Open With FineReader\ddeexec\Application]
@="FineReader"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\FoxitReader.Document\shell\Open With FineReader\ddeexec\Topic]
@="System"


EgOrus 20-09-2005 11:00 356829

bogomolv
не... это не мне это для VelDmi, наверное будет полезно :) я пользуюсь сокращенным вариантом и то лишь при создании WinPE
кстати сообщения лучше редактировать, если чего-то забыл дописать, чем плодить неск. подряд :)

bogomolv 20-09-2005 23:20 357021

Вложений: 3
Автоматизация подготовки диска к установке системы.
Два скрипта NewDisk.au3 и Unattend.au3:
http://forum.oszone.net/attachment.p...ntid=997&stc=1
http://forum.oszone.net/attachment.p...ntid=998&stc=1
http://forum.oszone.net/attachment.p...ntid=999&stc=1
Блин, как сделать, чтобы были рисунки?
С их помощью процесс развертывания системы на новом компьютере (друзья, дети, дети друзей и друзья детей) сводится к загрузке с CD Windows PE и исполнению этих самых скриптов.

Первым скриптом готовится диск: разбиение диска, его форматирование, развертывание WinPE, создание типовых папок, сбрасывание дистрибутива WinXP.
Привязка дистрибутива к машине и пользователю осуществляется вторым скриптом. Им правится unattend.txt: пользователь, настройки экрана, oem-драйвера и т.п. Самое муторное в этой процедуре - правка OemPnPDriversPath. Чтобы максимально облегчить редактирование этого параметра, включил в скрипт дополнительные средства обработки папки $oem$\$1\drivers.
Единственное, что приходится делать ручками (вернее, головой), отбирать для дистрибутива заготовки драйверов (включающие при необходимости скрипты автоустановки и подстройки последних). Как уже писал, для этого имею базу таких заготовок, которую по мере обновления драйверов и знакомства с новым железом периодически пополняю.
После такой подготовки, занимающей в несложном случае полчаса, остается запустить автоустановку WinXP. Проследив результат и подкорректировав исходники, вручаю "клиенту" работающую машину с "ноутбучным" комплектом ПО для автопереустановки системы, о котором рассказывал раньше.

Конечно, установка типовой системы с CD проще и быстрее. Для подобных целей имею собственный "супер-диск" с набором основных драйверов и типовых программ. Но чтобы донастроить установленную таким образом систему требуется квалификация. Вариант с дистрибутивом, полностью привязанным к машине, позволяет самому неподготовленному пользователю самостоятельно поддерживать работоспособность системы самым эффективным способом - периодически вчистую ее переустанавливая.

В продолжение разговора об интересных функциях.
При отладке работы NewDisk.au3 столкнулся с необходимостью считывать результаты командной строки непосредственно в память: WinPE работает с CD, жесткий диск еще не размечен, создавать виртуальный диск, чтобы выполнить DiskPart.exe /S list.txt > 1.txt, не хотелось. Нашел красивую замену в лице CLIPCOPY.EXE (21Kb), считывающей выходные данные командной строки в clipboard. С помощью этой программульки считываю информацию о присутствующих в системе дисках следующим образом:
Код:

RunWait('%Comspec% /C DiskPart.exe /S $iDir$\dpartLIST$i$.txt | CLIPCOPY','',0)
$dsk=StringSplit(ClipGet(),@CRLF)

Еще одна находка.
Раньше для развертывания WinPE на жестком диске (использую WinPE, в том числе, и при переустановке системы для автоудаления "замусоренных" системных папок) запускал установку Консоли восстановления, которая нужна была только для получения файловой копии загрузочного сектора BOOTSECT.DAT. Добрые люди подсказали, что в BartPE есть плагин, делающий это проще, быстрее и гибче. Позаимствовал оттуда MKBT.EXE (26Kb) и NT2PELDR.EXE (16Kb). Теперь создание загрузчика WinPE выглядит так:
Код:

RunWait('@ScriptDir@\mkbt.exe -x -c $ds$ $ds$\Peldr.dat')
RunWait('@ScriptDir@\nt2peldr.exe $ds$\Peldr.dat')
IniWrite('$ds$\Boot.ini','operating systems','C:\Peldr.dat','"Microsoft Windows PE" /MiniNT')

Последние находки позволили оптимизировать NewDisk.au3 так, что теперь можно подготовить чужой диск, просто подключив его к своей машине.

Sanja Alone 21-09-2005 02:39 357038

bogomolv
Цитата:

Извини, конечно. Но зря ты так!
Просто у меня обострено чувство справедливости.
Цитата:

Давай-ка займемся самоцензурой и все подправим.
ОК, ты только поговорки подбирай не такие резкие и более уместные :)

VelDmi 21-09-2005 06:40 357060

bogomolvEgOrus
Действительно огромное спасибо!
Не думал, что все так просто. Теперь буду ковырять другие программы в этом направлении, например XnView, который ставится unattend , но не забирает на себя графические форматы файлов. И Light Alloy тоже.

DenchikK 21-09-2005 14:58 357186

Получился скриптик для bootscreen (спасибо огромное за разъяснение Sanja Alone (14 страница)):

Код:

If @OSVersion="WIN_XP" then

  if @OSServicePack="Service Pack 1" then
  IniWrite (@HomeDrive & "\boot.ini", "operating systems", "multi(0)disk(0)rdisk(0)partition(1)\WINDOWS", '"Microsoft Windows XP Professional" /noexecute=optin /fastdetect /Kernel=myboots1.exe')
  FileCopy("myboots1.exe", @WindowsDir & "\system32\")
  endif

endif

If @OSVersion="WIN_XP" then

  if @OSServicePack="Service Pack 2" then
  IniWrite (@HomeDrive & "\boot.ini", "operating systems", "multi(0)disk(0)rdisk(0)partition(1)\WINDOWS", '"Microsoft Windows XP Professional" /noexecute=optin /fastdetect /Kernel=myboots2.exe')
  FileCopy("myboots2.exe", @WindowsDir & "\system32\")
  endif

endif

exit

Всё вроде бы работает, но хотелось бы сделать ещё и проверку просто XP, без сервис пака. Ни у кого пока не нашёл винды такой, поэтому проверить, что возвращает макрос @OSServicePack на такой винде, не получилось. Может у кого есть такая винда?

Sanja Alone 22-09-2005 01:54 357381

VelDmi
Цитата:

Теперь буду ковырять другие программы в этом направлении
Можно не ковырять, а при помощи RegShot-а сразу получить готовый reg-файл с вносимыми в реестр изменениями при ручной установке ассоциаций файлов в указанных тобой программах. Только используй RegShot в редакции ParaGlider-а

DenchikK
Цитата:

Всё вроде бы работает, но хотелось бы сделать ещё и проверку просто XP, без сервис пака
А что тебе мешает применить условие Else?
Код:

If @OSVersion="WIN_XP" then
Select
  Case @OSServicePack="Service Pack 1"
    код 1
  Case @OSServicePack="Service Pack 2"
    код 2
  Case Else
    код 3
EndSelect
EndIf


Sanja Alone 23-09-2005 04:28 357795

Добавил скрипты:
GordianKnot RipPack 0.35.0
No1 Media Fixer Pro 4.4
No1 Video Converter 3.x.x

P.S. Для ускорения загрузки страницы со скриптами переписал ее на php (сортировка по прежнему на JavaScript). В связи с этим теперь страница crta такая, а au3 - вот.

bogomolv 24-09-2005 05:32 358202

Свежий скрипт

Код:

Opt('ExpandEnvStrings', 1); default = 0
Opt('ExpandVarStrings', 1); default = 0
Opt('RunErrorsFatal', 0); default = 1
Opt('TrayIconDebug', 1); default = 0
$pDir='@ProgramFilesDir@\ABBYY FineReader 8.0 Professional Edition'
 
DirCopy ('@ScriptDir@\Russian',$pDir,1)
RunWait ('Regedit /S "@ScriptDir@\FineReader8.reg"')
RunWait ('msiexec /i @ScriptDir@\FineReader8.msi /qb')
FileCopy ('@ScriptDir@\Russian\FineReader.exe',$pDir,1)
FileCopy ('@ScriptDir@\Russian\VerData.prt',$pDir,1)
Exit

В папке \Russian лежат разархивированные файлы "русской морды" от FineReader (Russian UI.exe\Data1.cab: Tutorial1.chm, FineReader1.chm, fineui1.dll, screenshotreader1.dll, FRWordZoom1.dll, Shell1.dll, Enginel.dll, Russian.amd, Russian.amm, MorphoRes1.dll, Scan\ScanMan1.dll, Support\Ainfo.dll ) и пара файлов от установленного FineReader.
FineReader8.reg - копия нужных настроек из ветки HKCU\Software\ABBYY.

Проверял на 677 и 706 версиях.

Sanja Alone 25-09-2005 02:09 358414

Добавил скрипты:
Videofixer 3.23
WinDVD 6.0
WinRAR 3.5x

biork 26-09-2005 05:01 358608

У меня такая проблемка: не обрабатывается секция if - в любом случае (есть первое окно или нет) -
скрипт продолжает работу (или останавливается при наличии первого окна) со строчек после "Else"
В каком месте кривые руки? Где ошибка?

Код:

if WinExists ("Заголовок окна", "текст1") then
WinWaitActive("Заголовок окна", "текст1")
ControlClick ("Заголовок окна", "текст1", "button1")
...
...
Else
WinWaitActive("Заголовок окна", "текст2")
ControlClick ("Заголовок окна", "текст2", "button1")
...
...
endif


EgOrus 26-09-2005 07:20 358616

biork
У тебя скрипт ждет пока окно не станет активным WinWaitActive("Заголовок окна", "текст2").
Может лучше использовать конструкции типа:
Код:

IF WinExists ("Заголовок окна", "текст1") then
    WinActivate("Заголовок окна", "текст1")
    ControlClick ("Заголовок окна", "текст1", "button1")
    ...
    ...
ElseIf WinExists ("Заголовок окна", "текст2") then
  WinActivate("Заголовок окна", "текст2")
  ControlClick ("Заголовок окна", "текст2", "button1")
    ...
    ...
EndIf


biork 26-09-2005 15:06 358722

А зачем он ждёт активности второго окна, если появилось и активно первое?
Может я не прав, но по-моему логика скрипта такова, что при наличии первого окна ("Заголовок окна", "текст1")
должны выполняться строки после "then", при отсутствии оного или при появлении другого ("Заголовок окна", "текст2")
должны выполняться строки после "Else".
Если убрать условное выполнение, то каждая ветка скрипта выполняется нормально в своих условиях.

Твой вариант с WinActivate попробовал - не помогает. Причём, в моём варианте при наличии первого окна скрипт
ждёт на строке ожидания второго окошка, а в твоём - заканчивает работу

EgOrus 26-09-2005 18:20 358765

biork
Правильно в примере, кот. предложил я, если ни одно из условий неверно, то продолжаем работу скрипта дальше. В твоем же как ты правильно сказал, если первое условие неправильно, то в любом случае ждем активное окно ("Заголовок окна", "текст2"), если оно по каким-то причинам не появляется, то придется прерывать скрипт вручную.
Приведи полный пример своего скрипта.

biork 28-09-2005 01:01 359307

Вот весь скрипт с изменениями, как ты и рекомендовал в своём примере.
Часть, которая не хочет работать выделена курсивом

Код:

Opt("TrayIconDebug",1)
Run("3dmark03_v360_setup.exe")
WinWaitActive("3DMark03 - InstallShield Wizard", "Welcome to the InstallShield Wizard")
ControlClick("3DMark03 - InstallShield Wizard", "Welcome to the InstallShield Wizard", "Button1")
WinWaitActive("3DMark03 - InstallShield Wizard", "License Agreement")
ControlClick("3DMark03 - InstallShield Wizard", "License Agreement", "Button5")
ControlClick("3DMark03 - InstallShield Wizard", "License Agreement", "Button2")
WinWaitActive("3DMark03 - InstallShield Wizard", "Destination Folder")
ControlClick("3DMark03 - InstallShield Wizard", "Destination Folder", "Button1")
WinWaitActive("3DMark03 - InstallShield Wizard", "Click Install to begin")
ControlClick("3DMark03 - InstallShield Wizard", "Click Install to begin", "Button1")
;здесь может появиться окно ввода серийного номера, если программа ставится впервые
IF WinExists ("3DMark03 - InstallShield Wizard", "Futuremark Registration") then
WinActivate("3DMark03 - InstallShield Wizard", "Futuremark Registration")
ControlSetText("3DMark03 - InstallShield Wizard", "Futuremark Registration", "Edit1", "18P2M-MY24M-39UK6-QAX2N")
Sleep (1000)
ControlClick("3DMark03 - InstallShield Wizard", "Futuremark Registration", "Button2")
WinWaitActive("Congratulations!", "")
ControlClick("Congratulations!", "", "Button1")
WinWaitActive("3DMark03 - InstallShield Wizard", "InstallShield Wizard Complete")
ControlCommand("3DMark03 - InstallShield Wizard", "InstallShield Wizard Complete", "Button1", "UnCheck", "")
ControlCommand("3DMark03 - InstallShield Wizard", "InstallShield Wizard Complete", "Button2", "UnCheck", "")
ControlClick("3DMark03 - InstallShield Wizard", "InstallShield Wizard Complete", "Button4")
ElseIf WinExists ("3DMark03 - InstallShield Wizard", "InstallShield Wizard Complete") then
WinActivate("3DMark03 - InstallShield Wizard", "InstallShield Wizard Complete")
ControlCommand("3DMark03 - InstallShield Wizard", "InstallShield Wizard Complete", "Button1", "UnCheck", "")
ControlCommand("3DMark03 - InstallShield Wizard", "InstallShield Wizard Complete", "Button2", "UnCheck", "")
ControlClick("3DMark03 - InstallShield Wizard", "InstallShield Wizard Complete", "Button4")
EndIf
Exit

Насчёт логики. Дело то в том, что он почему то это первое окно не видит, хотя оно есть, ждёт и свиду вполне активно :). По мне, так условие выполнено, а вот с точки зрения AutoIt - почему то - нет :(
И что толку от продолжения работы скрипта, если дальнейшие действия связаны с кликаньями по окнам которые не появятся, пока не уйдёт текущее?

Я понимаю, что проблема выеденного яйца не стоит - можно сделать тихую инсталяшку или ввести серийный номер перед запуском установки с помощью рег-файла и исключить появление этого окна - дело в другом - хочу выяснить можно ли вообще бороться таким образом с "иногда появляющимися" окнами. У меня уже не первый случай когда нужно использовать функцию условного выполнения и всегда с этим проблемы. Что-то я тут не вкуриваю...

EgOrus 28-09-2005 09:59 359369

biork
Чтобы понять почему не работает пришлось поставить 3DMark2001, ставится он почти также как 2003, так вот дело в том что, твое условие If WinExists проверяется на стадии копирования файлов и декомпрессии текстур, естественно такого окна нет, и переходим к следующему условию ElseIf WinExists такого окна тоже нет и завершаем скрипт.
Нужно добавить перед проверкой условий, ожидание завершения процесса копирования, чтобы в момент проверки условий либо то либо то окно успело появиться, сделать можно по разному например вот так:
Код:

ControlClick("InstallShield Wizard", "Start Copying Files", "Button1")
;здесь может появиться окно ввода серийного номера, если программа ставится впервые
WinWait("Texture Conversion", "Setup Status")
WinWaitClose("Texture Conversion", "Setup Status" , 180)
sleep (1000)

IF WinExists ("InstallShield Wizard", "MadOnion.com Registration") then
WinActivate("InstallShield Wizard", "MadOnion.com Registration")


skylego 28-09-2005 17:01 359594

Вот скрипт для Windows XP Manader

;Видим скрытый текст
Opt("WinTitleMatchMode",2)
Opt("WinDetectHiddenText",1)
;Уберем все с окна
WinMinimizeAll()
Sleep(1000)

$SF_1 = @ScriptDir & "\xpmanager.exe"

$SF_2 = StringLeft(@ProgramFilesDir,2) & '\PROGRA~1\YANICS~1\WinXPM~1\WinXPM~1.exe'

Run(@ComSpec & " /c " & "start " & $SF_1 , "", @SW_HIDE)

$Title_1 = "WinXP Manager Setup"
$Title_2 = "WinXP Manager"

WinWaitActive($Title_1)
sleep(1000)
SEND("{ENTER}")

WinWaitActive($Title_2,'The installer will guide you through the steps required to install WinXP Manager on your computer.')
sleep(1000)
SEND("{ENTER}")

WinWaitActive($Title_2,'Select Installation Folder')
sleep(1000)
controlclick('','','Button5')
SEND("{ENTER}")

WinWaitActive($Title_2,'Confirm Installation')
sleep(1000)
SEND("{ENTER}")

WinWaitActive($Title_2,'Installation Complete')
sleep(1000)
SEND("{ENTER}")


Run( @ComSpec & " /c " & "start " & $SF_2 , "", @SW_HIDE)
sleep(1000)

WinActivate("WinXP Manager V4.92.3")

;WinWaitActive('WinXP Manager V4.92.3','UnRegistered...')
WinWaitActive('WinXP Manager V4.92.3','Try It')
sleep(1000)
controlclick('WinXP Manager V4.92.3','','WindowsForms10.BUTTON.app31')

WinWaitActive('Purchase and Register WinXP Manager V4.92.3')
sleep(1000)
ControlSetText( "" , "", 'WindowsForms10.EDIT.app35','XXXX')
ControlSetText( "" , "", 'WindowsForms10.EDIT.app34','XXXX')
ControlSetText( "" , "", 'WindowsForms10.EDIT.app33','XXXX')
ControlSetText( "" , "", 'WindowsForms10.EDIT.app32','XXXX')
ControlSetText( "" , "", 'WindowsForms10.EDIT.app31','XXXX')
controlclick('','','WindowsForms10.BUTTON.app32')

WinWaitActive('Finis','Please restart this software')
sleep(1000)
SEND("{ENTER}")

EXIT

biork 29-09-2005 01:18 359780

EgOrus
Ну ты монстр! :)
Всё заработало как часики. Оживил несколько заброшенных по подобной причине скриптов. Большущее тебе спасибо!
Вопрос на засыпку: зачем таймаут 3 минуты? А вдруг, диск плохо читается или комп 386-ой... я бы убрал этот параметр - пусть ждёт сколько ему надо.



EgOrus 29-09-2005 09:26 359873

biork
по поводу 3х минут, вопрос спорный, теоретически это на тот как раз случай если диск нечитается вообще, на разных приводах может быть по разному, где-то начинает читать до посинения бывает и по 10-20 минут и все равно потом сбоит, бывает ошибку выдает, в любом случае скрипт встанет (скорей всего появится окно инстоляра об ошибке установки) и нужно будет вмешиваться. А так он на автомате через 3 минуты пойдет дальше. Вместо 3х можно побольше конечно поставить.

Sanja Alone 30-09-2005 04:47 360212

Добавил скрипты:
Ad-Aware SE Personal 1.06r1
ListTV 3.8.6.1
MuxaSoft Dialer 4.1
O&O Defrag v8.0
RivaTuner v2.0 RC 15.x

Eralex 30-09-2005 22:48 360541

Кто-нибудь помогите заавтоитить Outpost 3.0
Раньше (v. 2.0-2.7) скрипт прекрасно отрабатывался в том месте,
где идёт сбор об установленных программах и создаются для них правило.
Скрипт корректно дожидался, пока кнопка "Далее" не станет доступной
для нажатия. Вот это место

Код:

WinWaitActive("Мастер конфигурации")
$e = ControlCommand("Мастер конфигурации", "Мастер конфигурации производит настройку Outpost Firewall Pro", "Button4", "IsEnabled", "")
While $e=0
$e= ControlCommand("Мастер конфигурации", "Мастер конфигурации производит настройку Outpost Firewall Pro", "Button4", "IsEnabled", "")
WEnd
Send("{ENTER}")

Но почему-то в версии 3.0 этот трюк не срабатывает. Сразу появляется окошко о конце установки,
т.е. получается, что недоступная копка каким-то образом нажалась.

Sanja Alone 01-10-2005 02:17 360581

Eralex
3.0 попробовать не довелось, но в 2.7 нормально работает такая конструкция:
Код:

...
WinWaitActive ( 'Мастер конфигурации' )
While ControlCommand ( 'Мастер конфигурации', '', 'Button6', 'IsEnabled', '')=0
Sleep ( 1000 )
WEnd
;Далее
ControlClick( 'Мастер конфигурации', '', 'Button6' )
...


Eralex 01-10-2005 22:42 360731

Цитата:

3.0 попробовать не довелось, но в 2.7 нормально работает такая конструкция:

Код:

Код:

...
WinWaitActive ( 'Мастер конфигурации' )
While ControlCommand ( 'Мастер конфигурации', '', 'Button6', 'IsEnabled', '')=0
Sleep ( 1000 )
WEnd
;Далее
ControlClick( 'Мастер конфигурации', '', 'Button6' )
...


Не помогло!!!


biork 07-10-2005 02:03 362212

Вот маленький скриптик. Работает.
Код:

Opt("TrayIconDebug",1)
if FileExists("C:\Windows\System32\drivers\ati2mtag.sys") Then
RunWait("Cpanel\Setup.exe /S")
Else
EndIf
Exit

а так - нет. Почему?
Код:

Opt("TrayIconDebug",1)
if FileExists("@SystemDir\drivers\ati2mtag.sys") Then
RunWait("Setup.exe /S", "@ScriptDir\Cpanel")
Else
EndIf
Exit


bogomolv 07-10-2005 08:25 362247

biork
Патаму чта синтаксис :)
Код:

Opt('ExpandEnvStrings', 1); default = 0
Opt('ExpandVarStrings', 1); default = 0
if FileExists("@SystemDir@\drivers\ati2mtag.sys") Then
RunWait("Setup.exe /S", "@ScriptDir@\Cpanel")
Else
EndIf
Exit

И будь осторожен с RunWait ( "filename" [, "workingdir" [, flag]] ).
Чтобы задать рабочий каталог, лучше использовать FileChangeDir ( "path" )
Код:

FileChangeDir("@ScriptDir@\Cpanel")
RunWait("Setup.exe /S")

All
Новый DrWeb433.
Установщик остался прежним. И также по-прежнему блокирует silent-установку. :(
Зато установщик разукрасили всеми цветами радуги. В результате, он перестал "понимать" ControlClick(...), ControlCommand(...,'Check') и т.д.!
Теперь приходится накручивать ControlSend('Внимание!!!',,'Button4','{+}{Enter}').

DenchikK 07-10-2005 20:59 362482

А у меня во в новом инсталяторе DrWeb 2 раза заедало:
1. В месте "Выберите вид установки" (причём иногда только).
2. В месте "Настройки прокси сервера" - при их отсутствии. Нажатие на кнопку отмены мышкой, приводит к продолжени. установки DrWeb, нажатие на неё AutoIT'ом приводит к завершению инсталяции.
И там и там вывернулся использованием эмуляции нажатия мышки.

Ещё в догонку такая придумка. В установке Dr.Divx, вернее при работе keygen, надо вызывать из каталога с установленной программы регистрационный файл. А вдруг у пользователя прога стоит не на диске C и даже не в Program Files? Как это узнать? И вот что я придумал (главное - работает!).
Вкратце так: берём из реестра информацию об установленной программе, и вот мы уже имеем всегда правильный путь. В Dr.Divx чуть сложнее - пути как такого нет, есть путь вместе с .exe файлом. Этот самый .exe файл то мы и отрезаем (функция отрезать строку с конца).
Так что можно сделать инсталяторы чуточку более универсальными.

biork 08-10-2005 05:21 362546

bogomolv
Мдя... Не очевидно (в справке, в описаниях макро об этом - ни слова...), но факт!
А зачем символ @ в конце каждого макро? Опять "синтаксис патаму чта"?
И почему осторожней с RunWait? Может надёжнее сам скрипт в нужную папку засунуть и вообще не указывать рабочий каталог?

VelDmi 14-10-2005 07:51 364138

Есть прекрасные макро @ComputerName и @IPAddress1 чтобы узнать имя компьютера и его адрес.
А как можно изменить их? Мне нужно задать их не ползая по вкладкам свойств.

Sanja Alone 25-10-2005 05:09 367418

bogomolv
Цитата:

Новый DrWeb433
Не качал - не скажу.
Цитата:

Установщик остался прежним. И также по-прежнему блокирует silent-установку
Как это блокирует? Вот у меня на автоустановочном диске лежит файлик drweb-432b-win-ru.exe. Ставится этим скриптом без всяких блокировок... Ес-но, для silent-установки нужно предварительно получить еще и файлик setup.iss (см. в том же архиве) установив один раз прогу командой drweb-432b-win-ru.exe -R.

VelDmi
Цитата:

Мне нужно задать их не ползая по вкладкам свойств.
Тогда придется поползать по реестру :)

CTEPBA 25-10-2005 23:43 367673

Люди подскажите как мне с помощью AuotIt поставить Dr.Web 4.33 ( не ставиться командой setup.exe /s) только если по шагово.

EgOrus 26-10-2005 00:45 367687

2Sanja Alone
Скачал у тебя скрипт на установку FoxitReader, к сожалению к новой версии он не подошел, посмотрев скрипт не понял зачем нужны условия на проверку Активности каждого окна? Практически во всех скриптовых языках условия несколько тормозят выполнение кода, легче сразу активировать окно без проверки его активности.
Цитата:

WinWait($Title,"Вас приветствует Мас")
If Not WinActive($Title,"Вас приветствует Мас") Then WinActivate($Title,"Вас приветствует Мас")
WinWaitActive($Title,"Вас приветствует Мас")
Send("{ENTER}")
Код:

;Установщик FoxitReader v1.3.909.exe
#cs
----------------------
$Title - заголовок окна установки
$file - установочный файл
$programgroup - в какую программную группу положить ярлыки программы
$rusfile - русифицированный исполнимы файл программы
----------------------
#ce
Global $Title='Foxit Reader Install Wizard', $file='foxitreader.1_3_909.exe', $rusfile='rus\Foxit Reader.exe';, $programgroup='Офис\Foxit PDF Reader'
Run($file)
WinWait($Title,"Setup will install")
WinActivate($Title,"Setup will install")
Send("{ENTER}")
WinWait($Title,"Please read the license")
WinActivate($Title,"Please read the license")
Send("{ENTER}")
WinWait($Title,"Please select an installation type")
WinActivate($Title,"Please select an installation type")
ControlClick ($Title, '', 'Button2' )
WinWait($Title,"Please Choose the folder")
WinActivate($Title,"Please Choose the folder")
ControlSetText($Title, "", 'Edit1', @ProgramFilesDir & '\Foxit Reader\' )
Send("{ENTER}")
WinWait($Title,"Desktop Settings")
WinActivate($Title,"Desktop Settings")
ControlClick ($Title, '', 'Button3')
ControlClick ($Title, '', 'Button7')
Send("{ENTER}")
WinWait($Title,"Click Install to continue")
WinActivate($Title,"Click Install to continue")
Send("{ENTER}")
WinWait($Title,"Setup has successfully")
WinActivate($Title,"Setup has successfully")
ControlClick ($Title, '', 'Button2')
Send("{ENTER}")

;если есть FoxitRus, то заменяем им оригинальный англ. исполнительный файл
If FileExists ( $rusfile ) Then
  FileCopy ( @ScriptDir & '\' & $rusfile, @ProgramFilesDir & '\Foxit Reader\', 1 )
EndIf


biork 26-10-2005 01:56 367700

Всем привет. Вопрос на засыпку. Нужон такой скрипт:

- проверяем является ли диск D: разделом жёсткого диска (существует ли вообще и не является ли сменным или сетевым)
- если да, то копируем на него файл
- если нет, то - нет.

Есть идеи?

Sanja Alone 26-10-2005 02:20 367702

Добавил скрипты:
ICE ECC 2.1
Sateira CD&DVD Burner 2.xx
WinImage 8.0 (и 7.0)


EgOrus
Цитата:

зачем нужны условия на проверку Активности каждого окна
1. Я мог бы придумать умный ответ, но скажу прямо - эти условия являются результатом использования ScriptWriter-а, входящего в состав редактора SciTE. Но ты конечно прав, условия спокойно можно убрать (оставив в соотв. стороках только функцию WinActivate).
2. Ты используешь странное сочетание функций при ожидании окон:
Код:

WinWait("Окно","Текст")
WinWaitActive("Окно","Текст")

Функция WinWait здесь лишняя, т.к. для нажатия ENTER-а функцией Send окно должно быть активным. Я же всегда юзаю вот такую связку:
Код:

WinWait("Окно","Текст")
WinActivate("Окно","Текст")
WinWaitActive("Окно","Текст")

(здесь можно опустить WinWaitActive, т.к. активация проходит очень быстро и эта функция является всего лишь дополнительным гарантом). А можно вообще использовать одну функцию WinWaitActive("Окно","Текст"), если есть уверенность, что окно при любом раскладе будет активировано.


CTEPBA
Скрипт для DrWeb 4.32b - попробуй, может и для 4.33 подойдет.


biork
Цитата:

Есть идеи?
Всего одна строка:
Код:

If DriveGetType ('d:\')='Fixed' Then FileCopy ( 'Откуда\файл', 'd:\' )

Sanja Alone 26-10-2005 03:35 367708

Меня по мылу уже неоднократно спаршивали как предотвратить множественный запуск одного и того же скрипта. Ответ вроде бы где-то на форуме встречался, но приведу его здесь еще раз. Все очень просто - в начало скрипта нужно добавить такую конструкцию:
Код:

If WinExists(@ScriptName) Then Exit
AutoItWinSetTitle(@ScriptName)


EgOrus 26-10-2005 08:39 367741

Sanja Alone
да, ты прав WinWaitActive("Окно","Текст" там абсолютно не нужен, видимо сказалось позднее время и нежелание писать что-то свое, когда есть готовое, отсюда и невнимательность, конечно же везде должно быть просто WinActivate.

По поводу скрипта для Sateira CDDVD Burner, можно нескромный вопрос? :) а почему скрипт сделан через работу с окнами, а не ключами установки?
/SILENT
/DIR="path"
/GROUP="folder name"
/TASKS="desktop,quicklaunch" (или /NOICONS)


Sanja Alone 26-10-2005 09:29 367752

EgOrus
Цитата:

а почему скрипт сделан через работу с окнами, а не ключами установки?
Я уже ранее писал о своем отношении к Inno Setup - он не всегда корректно отрабатывает эти самые ключи... А так все ОК.

EgOrus 26-10-2005 10:32 367766

Sanja Alone
Цитата:

он не всегда корректно отрабатывает эти самые ключи...
Это из личного опыта? в каких условиях не отрабатывает?
Странно, очень давно пользуюсь этой программой, сам постоянно делаю свои инстоляторы, ниразу не было чтобы что-то некоректно установилось. Единственный случай когда такое возможно, это если в скрипте жестко заданы пременные, и то отрабатывается все нормально просто поменять нельзя.
АвтоИт же наоборот только расширяет возможности InnoSetup, добавляя возможность использования переменных окружения при указании путей установки (при установке из комстроки требуется указание полновесных путей).

Спасибо за скрипт Gknot, я с тоской думал о том моменте когда придется его автоматизировать, жутко не люблю выписывать заголовки с окон, особенно когда их много

bogomolv 26-10-2005 15:22 367880

Sanja Alone

Цитата:

Как это блокирует? Вот у меня на автоустановочном диске лежит файлик drweb-432b-win-ru.exe. Ставится этим скриптом без всяких блокировок... Ес-но, для silent-установки нужно предварительно получить еще и файлик setup.iss (см. в том же архиве) установив один раз прогу командой drweb-432b-win-ru.exe -R.
Обнаружив, что DrWeb в 432 версии лишился старых ключей автоустановки (кажется, это делалось через ini-файл), в первую очередь опробовал именно комбинацию setup.exe -R + setup.exe -s -f1"путь\setup.iss". Файл setup.iss создавался нормально. Но обрабатываться он у меня никак не хотел (и не хочет!). В форуме на drweb.ru нашел подтверждение своим смутным подозрениям - кто-то из приближенных к разработчикам авторитетно утверждал, что такая возможность заблокирована, и автоматическая установка поддерживается только в Enterprise Suite.
Если это не так, то это здорово!
Но у меня установка не проходит ни с моими, ни с твоими файлами. Чтобы проверить твой скрипт, разыскал drweb-432b-win-ru.exe. Результат тот же. Только в моем случае в setup.log значится ResultCode=-3, в твоем - ResultCode=-5.
Кстати, а почему в твоем скрипте в строке запуска drweb-432b-win-ru.exe нет ключа -f1"путь\setup.iss"? Что, если не указывать на setup.iss явно, он должен "подхватится" автоматом?

Давай разбираться!

CTEPBA 26-10-2005 21:46 367992

Я сделал такой скрипт для Dr.Web 4,33 который работает по действиям, но у меня были проблемы с появление блокнота в конце, вроде я их решил, но еще проверял.
Код:

Run("setup.exe")
WinWaitActive("Dr.Web - InstallShield Wizard")
Send("{ENTER}")
WinWaitActive("Установка Dr.Web", "Программа InstallShield® Wizard установит Dr.Web (4.33.0.09290) на компьютер")
Send("{ENTER}")
WinWaitActive("Внимание!!!")
Send("{Space}")
Send("{ENTER}")
WinWaitActive("Установка Dr.Web", "ЛИЦЕНЗИОННЫЙ ДОГОВОР ОБ ИСПОЛЬЗОВАНИИ")
Send("{UP}")
Send("{ENTER}")
WinWaitActive("Установка Dr.Web", "Программа установки установит Dr.Web в следующую папку")
Send("{ENTER}")
WinWaitActive("Установка Dr.Web", "Выберите вид установки")
Send("{ENTER}")
WinWaitActive("Установка Dr.Web", "Программа установки добавит значки программ в папку, указанную ниже")
Send("{ENTER}")
WinWaitActive("Установка Dr.Web", "Программа установки располагает всеми данными для начала копирования программных файлов")
Send("{ENTER}")
WinWaitActive("Установка Dr.Web", "Если Вы не используете прокси сервер, нажмите")
Send("{Tab}")
Send("{Tab}")
Send("{Tab}")
Send("{ENTER}")
WinWaitActive("Вопрос")
Send("{Tab}")
Send("{ENTER}")
WinWaitActive("Установка Dr.Web", "Сейчас будет проведена экспресс-проверка Вашей системы")
Send("{ENTER}")
WinWaitActive("Вопрос")
Send("{Tab}")
Send("{ENTER}")
WinWaitActive("Установка Dr.Web", "Да, перезагрузить компьютер сейчас")
Send("{DOWN}")
Send("{ENTER}")
ProcessWait("notepad")
ProcessClose("notepad")


Sanja Alone 27-10-2005 02:18 368035

Я написал скрипт для Dr.Web 4.33 через клацанье по окнам, добавил в zip-ку к скрипту для 4.32b. Пока можно юзать и такой вариант.


EgOrus
Цитата:

Это из личного опыта? в каких условиях не отрабатывает?
Да, больше всего трабл вызывают /SAVEINF и /LOADINF - проще сразу написать скрипт, чем думать почему настройки не сохранились или не загрузились.

Цитата:

жутко не люблю выписывать заголовки с окон, особенно когда их много
А вот тут упомянутый мной выше ScriptWriter будет весьма кстати.


bogomolv
Цитата:

автоматическая установка поддерживается только в Enterprise Suite
Вот Пик... пик... пик... редиски. И чего они хотят этим способом добиться? Бабок? - ничего не выйдет, народ у нас закаленный :)

Цитата:

разыскал drweb-432b-win-ru.exe. Результат тот же. Только в моем случае в setup.log значится ResultCode=-3, в твоем - ResultCode=-5
А у меня как раз для версии 4.33 в логе значится ResultCode=-5, а 4.32b ставится как миленькая.

Цитата:

Что, если не указывать на setup.iss явно, он должен "подхватится" автоматом?
Угу, конечно, если он будет лежать в том же каталоге, где и установщик.

Цитата:

Давай разбираться!
Я обнаружил, что при запуске файла drweb-433-win-ru.exe в память загружается 2 процесса - один "правильный" (с указанными мной ключами -s -f2c:\drweb.log), а второй с теми же ключами, но перед ними стоит еще ключ -deleter. Вот если бы убить этот паразитный процесс не затронув полезного, то, возможно, проблема и решилась бы... Но вот как это сделать?

EgOrus 27-10-2005 08:53 368070

Sanja Alone
/SAVEINF и /LOADINF очень ограничены по использованию переменных окружения, все строчки из него дублируются обычными ключами.
Слегка видоизменил скрипт на Gknot, отменил установку AviSynth если есть более новый в этой же папке, добавил копирование плагинов к нему (к слову сказать - плаги ависинта работают на порядок быстрее VirtualDub'овских). В версии 2.56 появилась русская справка. Людям с толстыми каналами будет проще скачать новую версию GknotRipPack'a чем качать отдельно новый ависинт, тогда из скрипта нужно будет вырезать лишнее и переместить скрипт на установку ависинта.
Код:

If WinExists(@ScriptName) Then
  MsgBox(0, "Warning!", "Закрой предыдущую копию скрипта")
  Exit
EndIf
AutoItWinSetTitle(@ScriptName)

Opt('TrayIconDebug',1)
Opt('SendKeyDownDelay', 50)

ToolTip("Installing in progress. Please wait.", 1, 1)

#cs
----------------------
объявление переменных
----------------------
$file - имя инсталляционного файла
$avsfile - новая версия AviSynth
$AviSynthFolder - в какой подкаталог GKnot-а установить AviSynth
$VobSubFolder - в какой подкаталог GKnot-а установить VobSub
$vdubmodplug - rarsfx-архив с плагинами к VirtualDubMod
команды SFX-сценария (положите каталог PLUGINS целиком внутрь архива, в противном сл. задайте Path=GordianKnot\VirtualDubMod\Plugins):
        Path=GordianKnot\VirtualDubMod
        SavePath
        Silent=1
        Overwrite=1
----------------------
#ce
Global $file='GordianKnot.RipPack.0.35.0.Setup.exe', $avsfile='AviSynth\AviSynth_256_040905.exe', $AviSynthFolder='\AviSynth', $VobSubFolder='\Vobsub', $vdubmodplug='vdubmod_plugins.exe'
Run ( $file )
WinWaitActive ( 'Gordian Knot', 'License Agreement' )
Send ( '{ENTER}' )
WinWaitActive ( 'Gordian Knot', 'Choose Components' )
Send ( '{ENTER}' )
WinWaitActive ( 'Gordian Knot', 'Choose Install Location' )
$InstPath = ControlGetText ( 'Gordian Knot', 'Choose Install Location', 'Edit1')
Send ( '{ENTER}' )
WinWaitActive ( 'Installer Language' )
Send ( '{ENTER}' )
AutoItSetOption("WinTitleMatchMode", 2)
WinWaitActive ( 'VobSub', 'Welcome to the VobSub Setup Wizard' )
Send ( '{ENTER}' )
WinWaitActive ( 'Installation Options' )
Send ( '{ENTER}' )
WinWaitActive ( 'Installation Folder' )
ControlSetText( 'Installation Folder', '', 'Edit1', $InstPath & $VobSubFolder )
Send ( '{ENTER}' )
WinWaitActive ( 'Completed' )
Send ( '{ENTER}' )

AutoItSetOption("WinTitleMatchMode", 1)
If FileExists ( @ScriptDir & '\' & $avsfile ) Then
  ; Отказ от установки AviSynth 2.5.5
  WinWaitActive ( 'AviSynth', 'License Agreement' )
  ControlClick( 'AviSynth', 'License Agreement', 'Button3')
  Send ( '{ENTER}' )
Else
  ; Установка AviSynth из пакета Gknot
  WinWaitActive ( 'AviSynth', 'License Agreement' )
  Send ( '{ENTER}' )
  WinWaitActive ( 'AviSynth', 'Choose Components' )
  Send ( '{ENTER}' )
  WinWaitActive ( 'AviSynth', 'Choose Install Location' )
  ControlSetText( 'AviSynth', 'Choose Install Location', 'Edit1', $InstPath & $AviSynthFolder )
  Send ( '{ENTER}' )
  WinWaitActive ( 'AviSynth', 'Completing the AviSynth Setup Wizard' )
  Send ( '{ENTER}' )
EndIf

WinWait ( 'Gordian Knot', 'Installation Complete' )
WinClose ( 'Gordian Knot', 'Installation Complete' )
WinWaitClose ( 'Gordian Knot', 'Installation Complete' )

If FileExists ( @ScriptDir & '\' & $avsfile ) Then
  ; Установка новой версии AviSynth
  Run ( $avsfile )
  WinWaitActive ( 'AviSynth', 'License Agreement' )
  Send ( '{ENTER}' )
  WinWaitActive ( 'AviSynth', 'Choose Components' )
  ; Отметка русской справки
  Send ('{TAB}{DOWN}{RIGHT}r{SPACE}')
  ControlClick( 'AviSynth', '', 'Button2')
  WinWaitActive ( 'AviSynth', 'Choose Install Location' )
  ControlSetText( 'AviSynth', 'Choose Install Location', 'Edit1', $InstPath & $AviSynthFolder )
  Send ( '{ENTER}' )
  WinWaitActive ( 'AviSynth', 'Completing the AviSynth Setup Wizard' )
  Send ( '{ENTER}' )
EndIf

;запуск программы для внесения в реестр базовых настроек
Run ( $InstPath & '\GordianKnot.exe' )
WinWait ( 'Choose Language' )
WinActivate ( 'Choose Language' )
Send ( '{ENTER}' )
AutoItSetOption("WinTitleMatchMode", 2)
WinWait ( '(gordianknot.sourceforge.net)' )
WinClose ( '(gordianknot.sourceforge.net)' )
WinWaitClose ( '(gordianknot.sourceforge.net)' )
Sleep ( 50 )
;путь к DVDDecrypter почему-то не вносится в реестр в отличие от других (глюк наблюдается в версии GKnot 0.35.0)
RegWrite('HKEY_CURRENT_USER\Software\GordianKnot',"DvdDecrypterExe","REG_SZ",FileGetShortName($InstPath)&'\DVDDecrypter\dvddecrypter.exe')
;н-рые настройки
RegWrite('HKEY_CURRENT_USER\Software\GordianKnot',"DvdDecrypterNotUsed","REG_DWORD","00000000")
RegWrite('HKEY_CURRENT_USER\Software\GordianKnot',"ActivePage","REG_DWORD","00000000")
RegWrite('HKEY_CURRENT_USER\Software\GordianKnot',"Language","REG_SZ",'Russian')
RegWrite('HKEY_CURRENT_USER\Software\GordianKnot\Slot0',"Bitrate","REG_DWORD","00000421")
RegWrite('HKEY_CURRENT_USER\Software\GordianKnot\Slot0',"DivXMode","REG_DWORD","00000005")
RegWrite('HKEY_CURRENT_USER\Software\GordianKnot\Slot0',"CalculateAVIOverhead","REG_DWORD","00000001")
Sleep ( 50 )

;Распаковка дополнительных плагинов к VirtualDubMod
If FileExists ( @ScriptDir & '\' & $vdubmodplug ) Then RunWait ( @ScriptDir & '\' & $vdubmodplug )
;Копирование дополнительных плагинов AviSynth
DirCopy ( @ScriptDir & '\AviSynth\plugins', $InstPath & '\AviSynthPlugins', 1 )

;перенос ярлыков
;DirCopy ( @ProgramsCommonDir & '\Gordian Knot', @ProgramsCommonDir & '\CD и DVD утилиты\Gordian Knot', 1 )
DirCopy ( @ProgramsCommonDir & '\AviSynth 2.5', @ProgramsCommonDir & '\Gordian Knot\AviSynth', 1 )
DirCopy ( @ProgramsDir & '\AviSynth 2.5', @ProgramsCommonDir & '\Gordian Knot\AviSynth', 1 )
DirCopy ( @ProgramsDir & '\VobSub', @ProgramsCommonDir & '\Gordian Knot\VobSub', 1 )
;DirRemove ( @ProgramsCommonDir & '\Gordian Knot', 1 )
DirRemove ( @ProgramsCommonDir & '\AviSynth 2.5', 1 )
DirRemove ( @ProgramsDir & '\AviSynth 2.5', 1 )
DirRemove ( @ProgramsDir & '\VobSub', 1 )


bogomolv 27-10-2005 20:21 368266

Sanja Alone
Цитата:

Вот если бы убить этот паразитный процесс не затронув полезного, то, возможно, проблема и решилась бы... Но вот как это сделать?
С помощью ProcessWait(), ProcessList(), ProcessClose(). Но не помогает!

Sanja Alone 28-10-2005 05:55 368351

EgOrus
1. Ошибка
Код:

...
If FileExists ( @ScriptDir & '\' & $avsfile ) Then
  ; Отказ от установки AviSynth 2.5.5
  WinWaitActive ( 'AviSynth', 'License Agreement' )
  ControlClick( 'AviSynth', 'License Agreement', 'Button3')
  Send ( '{ENTER}' )
ElseIf
...

Здесь должно быть просто Else. Советую юзать редактор SciTe ( Ctrl+F5 - проверка синтаксиса ) - помогает при отлове подобных опечаток.

2. А зачем Opt('SendKeyDownDelay', 50) если в моем скрипте и так все работало?


bogomolv
Цитата:

С помощью ProcessWait(), ProcessList(), ProcessClose(). Но не помогает!
Я уже успел попробовать. Тестовый код:
Код:

Global $file='drweb-433-win-ru.exe'
Run ( $file & ' -s -f2' & EnvGet("SYSTEMDRIVE") & '\drweb.log' )
Sleep ( 200 )
$list = ProcessList($file)
If $list[1][1] > $list[2][1] Then
ProcessClose ( $list[1][1] )
msgbox(64, 'Процесс с PID = '&$list[1][1]&' был закрыт', 'Процессы drweb в памяти:'&@LF&@LF&$list[1][0] &'  '& $list[1][1] &@LF& $list[2][0] &'  '& $list[2][1],8)
Else
ProcessClose ( $list[2][1] )
msgbox(64, 'Процесс с PID = '&$list[2][1]&' был закрыт', 'Процессы drweb в памяти:'&@LF&@LF&$list[1][0] &'  '& $list[1][1] &@LF& $list[2][0] &'  '& $list[2][1],8)
EndIf

Причем независимо от того, какой процесс убивается - с большим или меньшим PID (это определяется знаком "<" или ">" в If-е) в памяти все равно остается тот, у к-рого есть паскудный ключ -deleter. Вот такая кака :(

EgOrus 28-10-2005 07:30 368355

Sanja Alone
да, все правильно, благодарю, такие вот гадкие ошибки потом всплывают в самый неподходящий момент.
Opt('SendKeyDownDelay', 50) пришло в скрипт вместе с шапкой, это у меня в каждом скрипте, особой пользы не несет, также как и вреда.

Petya V4sechkin 28-10-2005 10:18 368407

Вчера почти весь день убил на активацию AutoCAD 2005. Пришлось извратиться пару раз :)
Никому не надо? Если надо, скажите.

skylego 28-10-2005 11:17 368426

Цитата:

Вчера почти весь день убил на активацию AutoCAD 2005. Пришлось извратиться пару раз :)
Никому не надо? Если надо, скажите.
Если можно, то надо.
Отправь мне на skylego@mail.ru

garbals 28-10-2005 20:38 368548

как написать скрипт для
Цитата:

  1. включения гостя в XP
  2. разрешить доступ к комьпьютеру из сети гостям
  3. отклонить локальный вход гостю
  4. авто логон имеющегося пользователя (не известно какого)

помогите с написанием скрипта :)

EgOrus 28-10-2005 21:23 368559

garbals
это все делается батником
Код:

1.
net user Гость /active:yes
2 и 3
secedit /configure /cfg %SystemRoot%\Security\Templates\netaccess.inf /db %SystemRoot%\Security\Database\netaccess.db /overwrite /log %SystemRoot%\Security\logs\netaccess.log /quiet
4.
set UserN=%UserName%
set Password=
set regpath="HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"

:: Setting User %UserN% to Autologon.
REG ADD %regpath% /v DefaultUserName /t REG_SZ /d %UserN% /f
REG ADD %regpath% /v DefaultPassword /t REG_SZ /d %Password% /f
REG ADD %regpath% /v AutoAdminLogon /t REG_SZ /d 1 /f

данный тэмплэйт политик безопасности netaccess.inf, можно подправить (напрмер если нужен пользователь не Гость а какой нибудь другой/ие)

garbals 29-10-2005 02:20 368627

запустил батник не работает всё в политике на своих местах

EgOrus 29-10-2005 08:40 368645

garbals
подробности отправил в ПМ, оффтоп получается

Sanja Alone 01-11-2005 01:36 369379

Я получил на мейл такой вопрос:
Цитата:

Возможно ли в AutoIt v3 сделать цикл, который бы проверял открыт или
закрыт CD-ROM - если открыт, то его закрыть и наоборот.
Тут есть одна загвоздка - функция DriveStatus("Z:\")="NOTREADY" в двух случаях:
1. лоток выдвинут
2. лоток задвинут, но без диска.

Я вижу преодоление данной неоднозначности только с пом. начальных условий и дополнительной переменной и предложил такой вариант:
Код:

;задаем букву диска при пом. переменной для удобства написания кода
Global $d="Z:"
;начальные условия:
;нужно предварительно закрыть лоток, чтобы убрать неопределенность

CDTray($d, "closed")
;переменная, определяющая положение лотка (1 - выдвинут, 0 - задвинут)
Global $t=0
 
;цикл для демонстрации работы (любой код)
For $i=1 To 4
;вызов функции открытия/закрытия лотка независимо от наличия/отсутствия
;в нем диска (если открыт - закроется, и наоборот)

mycd($t, $d)
Next
 
;определяем возможность модификации функцией переменной $t (с пом. ключевого
;слова ByRef), чтобы потом можно было многократно в нужные моменты вызывать
;функцию mycd() и ей передавалось правильное состояние лотка.

Func mycd(ByRef $tray, $drive)
Local $status = DriveStatus($drive&"\")
Select
Case $status = "READY"
  CDTray($drive, "open")
  msgbox (64,'case1','$status = '&$status& @LF &'$tray = '&$tray& @LF &'action = "open"',3)
  $tray=1
Case $status = "NOTREADY" and $tray=1
  CDTray($drive, "closed")
  msgbox (64,'case2','$status = '&$status& @LF &'$tray = '&$tray& @LF &'action = "closed"',6)
  $tray=0
Case $status = "NOTREADY" and $tray=0
  CDTray($drive, "open")
  msgbox (64,'case3','$status = '&$status& @LF &'$tray = '&$tray& @LF &'action = "open"',6)
  $tray=1
EndSelect
EndFunc

Скорее всего, это неоптимальный вариант решения поставленной задачи, но он работоспособен. MsgBox-ы я поставил для наглядности - в рабочем варианте здесь должны быть Sleep-ы, достаточные для распознавания диска в приводе (при задвигании лотка) и поменьше (при выдвигании).

В принципе, задача не мирового масштаба, но все же: как ее решить правильно, какие будут мысли?

fox_sly 01-11-2005 11:24 369467

Во первых строках огромный сенькс за труды Sanja Alone, bogomolv и другим участникам форума, за их подробные описания и толкования...
Изучив труды набросал для знакомого скриптик для установки Photoshop CS2, может кому пригодится?

Sanja Alone
- может подредактируешь и выложишь более оптимальный вариант у себя на сайте?

регистрациооные данные вбиты в файле Abcpy.ini
Код:

[OEM Install]
SERIALNUMBER=XXXX-XXXX-XXXX-XXXX-XXXX-XXXX
USERNAME=Fox Sly
COMPANYNAME=Fox Sly System

сам скрипт

Код:

;предотвращение возможности множественного запуска скрипта добавлено Sanja Alone
If WinExists(@ScriptName) Then Exit
AutoItWinSetTitle(@ScriptName)

;Отображать текущую строку сценария с помощью индикатора системной панели в режиме отладки.
AutoItSetOption("TrayIconDebug", 1)

; Установка переменных
Global $file='setup.exe', $key='keygen.exe', $rus='PhotoshopCS2RU.exe', $AvtCode, $ACStr

Run ( $file )

WinWaitActive ( 'Adobe Photoshop CS2 - Setup' )
ControlClick ( 'Adobe Photoshop CS2 - Setup', '', 'Button1' )

; окно лицензионного соглашения, я думаю Не согласных нет? -)
WinWaitActive ( 'Adobe Photoshop CS2 - License Agreement' )
ControlClick ( 'Adobe Photoshop CS2 - License Agreement', '', 'Button5' )

; ввод информации о пользователе, в моем примере данные прописаны в файле Abcpy.ini
WinWaitActive ( 'Adobe Photoshop CS2 - Setup','Customer Information' )
ControlClick ( 'Adobe Photoshop CS2 - Setup', 'Customer Information', 'Button1' )

; выбор пути установки - по умолчанию
WinWaitActive ( 'Adobe Photoshop CS2 - Setup','Destination Folder' )
ControlClick ( 'Adobe Photoshop CS2 - Setup', 'Destination Folder', 'Button1' )

; ассоциация файлов - по умолчанию
WinWaitActive ( 'Adobe Photoshop CS2 - Setup','File Association' )
ControlClick ( 'Adobe Photoshop CS2 - Setup', 'File Association', 'Button1' )

; рапорт инсталятора о готовности к установки
WinWait ( 'Adobe Photoshop CS2 - Setup','Ready to Install the Program' )
WinWaitActive ( 'Adobe Photoshop CS2 - Setup','Ready to Install the Program' )
ControlClick ( 'Adobe Photoshop CS2 - Setup', 'Ready to Install the Program', 'Button1' )

; активация - начало
WinWait  ( 'Adobe Photoshop Installer','Activation Options' )

;это окно иногда появляется, а иногда нет. Закономерность появления не найдена.
If WinExists ( 'Adobe Photoshop Installer', 'Activate Using the Internet' ) Then
      WinActivate (  'Adobe Photoshop Installer', 'Activate Using the Internet' )
      WinWaitActive (  'Adobe Photoshop Installer', 'Activate Using the Internet' )
      ControlClick ( 'Adobe Photoshop Installer', 'Activate Using the Internet', 'Button3' )
EndIf
; продолжение активации - выбираем активировать по телефону
WinWaitActive ( 'Adobe Photoshop Installer','Activation Options' )
Sleep ( 500 )
ControlClick ( 'Adobe Photoshop Installer','Activation Options', 'Button2' )
Sleep ( 500 )
ControlClick ( 'Adobe Photoshop Installer','Activation Options', 'Button7' )

; Запуск кейгена
Run ( $key )
WinWaitActive ( 'Keygen by PARADOX', 'Serial Number')

; Активация окна регистрации, получение серийника и вставка в кейген
WinActivate ( 'Adobe Photoshop Installer', 'Phone Activation' )
WinWaitActive ( 'Adobe Photoshop Installer', 'Phone Activation' )
$GetSN1=ControlGetText('Adobe Photoshop Installer', 'Phone Activation', 'Edit3')
ControlSetText('Keygen by PARADOX', 'Serial Number', 'Edit1', $GetSN1)

; Получение активационного номера и вставка в кейген
$GetSN2=ControlGetText('Adobe Photoshop Installer', 'Phone Activation', 'Edit4')
ControlSetText('Keygen by PARADOX', 'Serial Number', 'Edit2', $GetSN2)

; Активация кейгена и генерация кода авторизации
WinActivate ( 'Keygen by PARADOX', 'Serial Number' )
WinWaitActive ( 'Keygen by PARADOX', 'Serial Number')
ControlClick ( 'Keygen by PARADOX', 'Serial Number', 'Button2' )
Sleep ( 500 )

; Получение кода авторизации
$AvtCode = ControlGetText ( 'Keygen by PARADOX', 'Serial Number', 'Edit3' )

; Код авторизации получен в виде xxxx xxxx xxxx xxxx xxxx разбиваем его на блоки
$ACStr = StringSplit ( $AvtCode, ' ' )
Sleep ( 500 )

; вставка кода авторизации
WinActivate ( 'Adobe Photoshop Installer', 'Phone Activation' )
WinWaitActive ( 'Adobe Photoshop Installer', 'Phone Activation' )
ControlSetText ( 'Adobe Photoshop Installer', 'Phone Activation', 'Edit6', $ACStr[1] )
ControlSetText ( 'Adobe Photoshop Installer', 'Phone Activation', 'Edit7', $ACStr[2] )
ControlSetText ( 'Adobe Photoshop Installer', 'Phone Activation', 'Edit8', $ACStr[3] )
ControlSetText ( 'Adobe Photoshop Installer', 'Phone Activation', 'Edit9', $ACStr[4] )
ControlSetText ( 'Adobe Photoshop Installer', 'Phone Activation', 'Edit10', $ACStr[5] )

; закрываем кейген
WinActivate ( 'Keygen by PARADOX', 'Serial Number' )
WinWaitActive ( 'Keygen by PARADOX', 'Serial Number')
ControlClick ( 'Keygen by PARADOX', 'Serial Number', 'Button3' )

; продолжаем установку
WinActivate ( 'Adobe Photoshop Installer', 'Phone Activation' )
WinWaitActive ( 'Adobe Photoshop Installer', 'Phone Activation' )
ControlClick ( 'Adobe Photoshop Installer', 'Phone Activation', 'Button3' )

WinWait  ( 'Adobe Photoshop Installer', 'Thank You!' )
WinWaitActive ( 'Adobe Photoshop Installer', 'Thank You!' )
ControlClick ( 'Adobe Photoshop Installer', 'Thank You!', 'Button2' )

; основная установка закончена, ждем установки Adobe Brige и прочей ерунды

WinWait ( 'Adobe Photoshop CS2 - Setup', 'InstallShield Wizard Completed' )
WinWaitActive ( 'Adobe Photoshop CS2 - Setup', 'InstallShield Wizard Completed' )
ControlClick ( 'Adobe Photoshop CS2 - Setup', 'InstallShield Wizard Completed', 'Button4' )
Sleep ( 50 )
ControlClick ( 'Adobe Photoshop CS2 - Setup', 'InstallShield Wizard Completed', 'Button3' )


; Запуск руссификатора, для тех кому он нужен
Run ( $rus )
WinWaitActive ( 'Adobe Photoshop CS2 Russian - InstallShield Wizard')
ControlClick ( 'Adobe Photoshop CS2 Russian - InstallShield Wizard', '', 'Button1' )
WinWaitActive ( 'Adobe Photoshop CS2 Russian - InstallShield Wizard', 'Select folder where setup will install files' )
ControlClick ( 'Adobe Photoshop CS2 Russian - InstallShield Wizard', 'Select folder where setup will install files' , 'Button6' )
WinWaitActive ( 'Adobe Photoshop CS2 Russian - InstallShield Wizard', 'The wizard is ready to begin installation.' )
ControlClick ( 'Adobe Photoshop CS2 Russian - InstallShield Wizard', 'The wizard is ready to begin installation.' , 'Button8' )
WinWaitActive ( 'Adobe Photoshop CS2 Russian - InstallShield Wizard', 'InstallShield Wizard Complete' )
ControlClick ( 'Adobe Photoshop CS2 Russian - InstallShield Wizard', 'InstallShield Wizard Complete' , 'Button15' )

exit

Проверил на паре машин - вроде работает

Sanja Alone 02-11-2005 05:22 369713

Petya V4sechkin
Цитата:

Вчера почти весь день убил на активацию AutoCAD 2005. Пришлось извратиться пару раз :)
Никому не надо? Если надо, скажите.
Если не будешь возражать, то я размещу твой скрипт на соотв. странице своего сайта (дав ссылку на тебя как автора). В сл. твоего согласия - кинь свой скрипт мне на мыло.

fox_sly
Цитата:

может подредактируешь и выложишь более оптимальный вариант у себя на сайте?
Спасибо, уже выложил. А подредактировать я не смогу, т.к. Photoshop CS2 у меня нет - проверить будет не на чем :)

DenchikK 02-11-2005 19:21 369925

Есть такая задача - с помощью AutoIT вставлять пароли в определённое
поле программы. Проблемма в том, что если скрипт .exe
раскомпилировать, то легко можно прочитать эти пароли. Понятно, что
нет ничего не взламываемого. Но от обычных пытливых юзеров хотелось бы
всё-таки пароли скрыть. Можно ли как то осуществить это с помощью
AutoIT?

AlikPan 02-11-2005 19:49 369928

Гуру от Autoit?
Необходимо установить в переменные SET (для старых DOS задач)
в Autoit 2.64 использовал такие строки:

IfEqual,AUsername,L4305,Run,WinSet LOG_ST=F32,,hide

решил опробовать в Autoit 3.01.02, но WinSet как бы ругается
может есть провереное и более надежное решение ?
Да и не хочется использовать внешние утилиты.


Sanja Alone 03-11-2005 02:30 369987

DenchikK
Цитата:

Но от обычных пытливых юзеров хотелось бы всё-таки пароли скрыть.
Aut2Exe.exe /? (см. в сторону ключа /nodecompile).


AlikPan
Цитата:

Необходимо установить в переменные SET
Непонятно что ты хочешь. Если установить системную переменную, то вот примеры:
1. Дописывание пути к 7-zip в переменную Path:
Код:

$cur = RegRead ( "HKEY_LOCAL_MACHINE\SYSTEM\Select", "Current" )
$smcur = 'HKEY_LOCAL_MACHINE\SYSTEM\ControlSet00' & $cur & '\Control\Session Manager\Environment'
$syscurpath = RegRead ( $smcur, "Path" )
$sysnewpath = $syscurpath & Chr (59) & '%ProgramFiles%\7-Zip'
RegWrite ( $smcur, "Path", "REG_EXPAND_SZ", $sysnewpath )

2. Создание новой системной переменной new строкового типа:
Код:

$newsysvarname = 'new'
$newsysvartype='REG_SZ'
$newsysvarvalue='value'
$cur = RegRead ( "HKEY_LOCAL_MACHINE\SYSTEM\Select", "Current" )
$smcur = 'HKEY_LOCAL_MACHINE\SYSTEM\ControlSet00' & $cur & '\Control\Session Manager\Environment'
RegWrite ( $smcur, $newsysvarname, $newsysvartype, $newsysvarvalue )

Можешь на основе этих обособленных неоптимизированных примеров написать функции соотв-но для изменения и создания системных переменных.

Цитата:

IfEqual,AUsername,L4305,Run,WinSet LOG_ST=F32,,hide
Если AUsername=L4305, тогда запустить некую утилиту WinSet с параметрами LOG_ST=F32 в скрытом окне (функции WinSet в автоите нет). К чему это?

DenchikK 03-11-2005 04:32 369997

Sanja Alone
Спасибо большое, всё получилось.

Sanja Alone 04-11-2005 01:03 370235

В скрипте для Winamp 5.xx исправил косяк с записью параметров в winamp.ini. На момент записи файл был недоступен для этой самой записи :) - добавил проверку.

fox_sly 05-11-2005 20:31 370611

Тут на днях наводил порядок на винте и попался один из первых скриптов для создания Dial Up соединения
- так что может кому пригодится, единственное ограничение на сколько я помню, это то, что дрова для модема уже должны быть установлены и в системе должен быть только один модем, для двух и более прийдется подредактировать :)
Код:

;Запуск Мастера подключения к интернету
Run ("rundll32.exe netshell.dll,StartNCW")
WinWaitActive                ( "Мастер новых подключений" )
ControlClick                ( "Мастер новых подключений", "", "&Далее >" )
WinWaitActive                ( "Мастер новых подключений" )
ControlClick                ( "Мастер новых подключений", "", "&Подключить к Интернету" )
ControlClick                ( "Мастер новых подключений", "", "&Далее >" )
WinWaitActive                ( "Мастер новых подключений" )
ControlClick                ( "Мастер новых подключений", "", "&Установить подключение вручную" )
ControlClick                ( "Мастер новых подключений", "", "&Далее >" )
WinWaitActive                ( "Мастер новых подключений" )
ControlClick                ( "Мастер новых подключений", "", "Через &обычный модем" )
ControlClick                ( "Мастер новых подключений", "", "&Далее >" )
WinWaitActive                ( "Мастер новых подключений" )
Send                        ( "Demo Инфотекс" )
ControlClick                ( "Мастер новых подключений", "", "&Далее >" )
WinWaitActive                ( "Мастер новых подключений")
Send                        ( "313003" )
ControlClick                ( "Мастер новых подключений", "", "&Далее >" )
WinWaitActive                ( "Мастер новых подключений")
Send                        ( "demo" )
Send                        ( "{tab}" )
Send                        ( "demo" )
Send                        ( "{tab}" )
Send                        ( "demo" )
ControlClick                ( "Мастер новых подключений", "", "Сделать &это подключение подключением к Интернету по умолчанию" )
ControlClick                ( "Мастер новых подключений", "", "&Далее >" )
WinWaitActive                ( "Мастер новых подключений")
ControlClick                ( "Мастер новых подключений", "", "Готово" )

Exit


Sanja Alone 07-11-2005 06:30 370940

Добавил скрипт для Exact Audio Copy v0.95 beta 3
Переписал/дополнил/изменил ВСЕ скрипты на сайте:
- "шапки" теперь содержат инфу о версиях приложений на к-рых скрипты тестировались
- вписал те самые две строчки для предотвращения возможности множественного запуска скриптов
- все-таки решил перейти на вариант TrayIconDebug; TrayIconHide/BlockInput-вариант закомментировал
- везде, где нужно приписал макрос @ScriptDir для возможности запуска любого скрипта в неоткомпилированном вар-те без необходимости ложить его рядом с Autoit3.exe
- дописал тихие варианты установки там, где это было уместно
- еще что-то, сам не помню :)

Jangle 08-11-2005 01:36 371351

Панель инструментов "МОЙ КОМПЬЮТЕР"
 
Доброго времени суток, уважаемые!

Вот какой вопрос мучает:
Все вы знаете что в винде есть панель инструментов быстрого запуска, языковая панель и т.д.
Так же сть возможность создание своей панели.
Вот что я делаю:
1 кликаю провой кнопкой на панели задач (на ней кнопка ПУСК)
2 снимаю галочку "закрепить панель задач"
3 см 1 --> панель инструментов --> создать панель инструментов
4 В окне "создать панель инструментов" выбераю папку "МОЙ КОМПЬЮТЕР" и жму ОК
после чего на панели задачь появляеться панель инструментов "МОЙ КОМПЬЮТЕР"
5 хватаю мышкой область этой панели помеченной вертикальной линией из точек и перетаскиваю до упора вверх (мышка тянет прямоугольник)
где эта панель прилипает к верху экрана
6 теперь кликая на этой панели правой кнопкой настраиваю ее - снимаю галочку показать заголовок,
ставлю галочки - поверх остальных окон и автоматически уберать с экрана
7 - настраиваю размер панели (так же как и с окнами)
8 возвращаю галочку п.2


это я так подробно описал для того что бы можно было бы посмотреть результат.

А ВОТ ТЕПЕРЬ САМ ВОПРОС:

как можно сделать эту панель не прописывая в AUTOIT эти все пошаговые действия
утраивает 2 варианта
1 - это делаеться с помощью реестра или системных файлов или файлов настройки explorer
2 - может возможно это сделать с помощью GUI

еще интересует где находяться настройки "поверх остальных окон", "автоматически уберать с экрана", размер панели и т.д

Буду признателен за любые предложения и мысли.
Спасибо всем

Jangle 08-11-2005 01:45 371352

В догонку
 
в догонку Dial_up
как запустить соединение так что бы вышло стондартное окно И
ка запустить соединение бе этого окна.

bogomolv 08-11-2005 07:49 371387

Jangle

За показ Панели быстрого запуска и поведение Панели Пуск отвечают ключи
;QStart - настройки
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Streams\Desktop]
"TaskbarWinXP"=
;STARTUP - настройки: автоскрывать, маленькие кнопки и т.д.
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\StuckRects2]
"Settings"=

Но сочетание параметров, отраженных в этих ключах сложное. Их работоспособность зависит от других настроек Explorer'a. Кроме того, при установке WinXP некторые настроенные параметры будут сбрасываться и забиваться дефолтными настройками.

С помощью AutoIt Панель быстрого запуска не настроишь.
Фантастика, но если не перетащить хотя бы одну иконку "ручками", то после перезапуска иконки "перетасуются" в нужном и понятном только им порядке. Так происходит, даже если перетаскивать иконки с помощью AutoIt.
Самое простое - устанавливать приложения, иконки которых тебе нужны в Панели быстрого запуска, именно в строго заданной последовательности.



ags 08-11-2005 15:29 371541

Help!

Как АвтоИтом послать программе установки нажатие клавиши "+" на NumPade. Конструкция Send ("{+}") не работает. Там вообщето меню раскрывающееся (такое же как при выборе компонентов Office). Оно внутри окна и по-отдельности пункты не активизируются, только все меню целиком. Остается два способа: по координатам мышом (но ИМХО не надежно, вдруг на другом компе координаты не совпадут...) и стрелками, но чтобы попасть в подменю нужен этот "+". Иначе слишком много ненужного барахла установится:(


Сорри, не могу удалить... Сработала стрелка вправо (как я эту клавишу упустил из виду, ума не приложу...) Еще раз сорри за пустой пост...

AlikPan 08-11-2005 18:02 371608

Sanja Alone
Цитата:

2. Создание новой системной переменной new строкового типа:

Код:
$newsysvarname = 'new'
$newsysvartype='REG_SZ'
$newsysvarvalue='value'
$cur = RegRead ( "HKEY_LOCAL_MACHINE\SYSTEM\Select", "Current" )
$smcur = 'HKEY_LOCAL_MACHINE\SYSTEM\ControlSet00' & $cur & '\Control\Session Manager\Environment'
RegWrite ( $smcur, $newsysvarname, $newsysvartype, $newsysvarvalue )
пожалуй это именно то, что нужно, СПАСИБО

Цитата:

IfEqual,AUsername,L4305,Run,WinSet LOG_ST=F32,,hide

Если AUsername=L4305, тогда запустить некую утилиту WinSet с параметрами LOG_ST=F32 в скрытом окне (функции WinSet в автоите нет). К чему это?
Всё правильно, нет такой функции. Но есть сторонняя утилита WinSet.exe (кажется от MIcrosoft), которую
я и вызываю. Устаналивает переменные SET в среде WINDOWS

Jangle 08-11-2005 20:40 371638

2 bogomolv - огромное спасибо за информацию!!!
Буду думать :sorry:

Sanja Alone 09-11-2005 01:17 371725

1. Добавил скрипт для Teleport Pro 1.38

2. Исправил ошибку в конвертере crta - неправильно импортировались в реестр параметры типа REG_DWORD (значения интерпретировались как десятичные). Кавычки заменил на дописывание к значению префикса "0x" - теперь все правильно (значения считаются шестнадцатиричными).

Эта ошибка также касается следующих скриптов:
7-Zip
Agnitum Outpost
DivX 5
DivX 6
DVDIdle
GordianKnot
ImageDupeless
ISOBuster
O&O Defrag
Pragma

Если кто-то скачал - извините. Можете скачать еще раз или исправить вручную. Я сам случайно заметил данную недоработку, т.к. большинство DWORD параметров были или 0 или 1, а эти цифры одинаковы во всех системах счисления.

DenchikK 09-11-2005 17:59 371962

fox_sly
Практически так же сделано и у меня, только бы я Вам посоветовал заменить Send на ControlSetText - так оно и лучше и надёжнее будет.

Как то вот так:

Код:

Run("rundll32.exe netshell.dll,StartNCW")
WinWaitActive ('Мастер новых подключений','Мастер новых подключений')
Send('{Enter}')
Sleep ('500')
WinWaitActive ('Мастер новых подключений','Подключить к Интернету для просмотра веб-узлов и чтения  электронной почты.')
ControlClick ('Мастер новых подключений','Подключить к Интернету для просмотра веб-узлов и чтения  электронной почты.','Button1')
Sleep ('500')
Send('{Enter}')

WinWaitActive ('Мастер новых подключений','Каким образом подключиться к Интернету')
ControlClick ('Мастер новых подключений','Каким образом подключиться к Интернету','Button2')
Sleep ('500')
Send('{Enter}')
WinWaitActive ('Мастер новых подключений','Данное подключение использует модем и обычную телефонную линию или телефонную линию ISDN.')
ControlClick ('Мастер новых подключений','Данное подключение использует модем и обычную телефонную линию или телефонную линию ISDN.','Button1')
Sleep ('500')
Send('{Enter}')
WinWaitActive ('Мастер новых подключений','Им&я поставщика услуг')
ControlSetText ( 'Мастер новых подключений', '', 'Edit1', 'Peterstar' )
Sleep ('500')
Send('{Enter}')
WinWaitActive ('Мастер новых подключений','Номер &телефона:')
ControlSetText ( 'Мастер новых подключений', '', 'Edit1', '3203370,,,' )
Sleep ('500')
Send('{Enter}')
WinWaitActive ('Мастер новых подключений','&Имя пользователя:')
sleep (100)
ControlSetText ( 'Мастер новых подключений', '', 'Edit1', 'Login')
sleep (100)
ControlSetText ( 'Мастер новых подключений', '', 'Edit2', 'Password')
Send('{tab}')
sleep (100)
ControlSetText ( 'Мастер новых подключений', '', 'Edit3', 'Password')
Sleep ('500')
ControlCommand ( 'Мастер новых подключений', '', 'Button13', 'Check', '' )
ControlCommand ( 'Мастер новых подключений', '', 'Button2', 'Check', '' )
Sleep ('500')
Send('{Enter}')
WinWaitActive ('Мастер новых подключений','Завершение работы мастера новых подключений')
ControlCommand ( 'Мастер новых подключений', '', 'Button20', 'UnCheck', '' )
Send('{Enter}')
Exit


fox_sly 09-11-2005 20:19 371992

to DenchikK
С заменой согласен, просто как писал выше это была одна из первых попыток написать скрипт для соединения,
насколько я помню там была другая проблема, что не удалось в свое время уйти от Send('{Enter}'),
по крайней мере у меня строка типа
Код:

WinWaitActive ('Мастер новых подключений','Мастер новых подключений')
Send('{Enter}')

срабатывала, а вот замена через ControlClick
Код:

WinWaitActive ('Мастер новых подключений','Мастер новых подключений')
ControlClick  ('Мастер новых подключений','Мастер новых подключений','Button3')

не работала, окно вообще закрывалось

CTEPBA 09-11-2005 20:31 371994

Люди обэясните пожалуйста почему когда с ставлю Alcohol 120% при помощи какого сктрипта:
Код:

AutoItSetOption("TrayIconHide", 1)
If @OSType="WIN32_NT" Then BlockInput ( 1 )
AutoItSetOption ( "SendKeyDelay", 10 )
Global $file='setup.exe', $patchfile='patch_3105.exe', $alcoholdir=@ProgramFilesDir & '\Alcohol Soft\Alcohol 120\'
;запуск установки в тихом режиме
Run( $file & ' /qn REBOOT=Suppress' )
ProcessWait ( "rundll32.exe" )
ProcessClose ("rundll32.exe")
Sleep ( 50 )
If FileExists ( $alcoholdir & '\Alcohol.exe' )=1 Then
      FileCopy ( @ScriptDir & '\' & $patchfile, $alcoholdir & $patchfile, 1 )
      FileChangeDir ( $alcoholdir )
      Run ( $alcoholdir & $patchfile, $alcoholdir )
      WinWait ( 'Patch','Alcohol 120% v1.9.5.3105 Retail')
      WinActivate ( 'Patch' )
      ControlClick ( 'Patch', '', 'Button1' )
      Sleep ( 4000 )
      WinClose ( 'Patch', 'Alcohol 120% v1.9.5.3105 Retail' )
      WinWaitClose ( 'Patch','Alcohol 120% v1.9.5.3105 Retail' )
EndIf
;н-рые настройки
RegWrite('HKEY_CURRENT_USER\Software\Alcohol Soft\Alcohol 120%\Options\Display',"AutostartWhenWindowsStartup","REG_SZ",'0')
RegWrite('HKEY_CURRENT_USER\Software\Alcohol Soft\Alcohol 120%\Options\Display',"ExecuteInFullScreen","REG_SZ",'0')
RegWrite('HKEY_CURRENT_USER\Software\Alcohol Soft\Alcohol 120%\Options\Display',"ListPhysicalDevicesFirst","REG_SZ",'0')
RegWrite('HKEY_CURRENT_USER\Software\Alcohol Soft\Alcohol 120%\Options\General',"AutoCheckCurrentVersionViaInternetAtStart","REG_SZ",'0')
RegWrite('HKEY_CURRENT_USER\Software\Alcohol Soft\Alcohol 120%\Options\Virtual drive',"MountImageTo1stDeviceOnDblClickingImageFile","REG_SZ",'1')
RegWrite('HKEY_CURRENT_USER\Software\Alcohol Soft\Alcohol 120%\Options\Recording',"OverBurnDisc","REG_SZ",'1')

У меня закрывается WPI, а установка Alcohol продолжается?

DenchikK 09-11-2005 21:16 372008

CTEPBA
Рискну предположить причину:

Алкоголь ставиться примерно так:
msiexec /qn /quiet /i setup.msi DRIVER0=a347bus DRIVER1=a347scsi INSTALLDIR="%programfiles%\Alcohol Soft\" /norestart

Потому то и не ставиться у тебя он.

Вот мой пример. Поправь его под себя:

Код:


prog[pn]=['Alcohol 120% 1.9.5.3105']
desc[pn]=['Эмулятор Лазерных Дисков <i>Установка Ключами</i>']
ordr[pn]=[4]
cmd1[pn]=['msiexec /qn /quiet /i %cdrom%\\Software\\Programs\\Alcohol\\setup.msi DRIVER0=a347bus DRIVER1=a347scsi INSTALLDIR="%programfiles%\\Alcohol Soft\\" /norestart']
cmd2[pn]=['%cdrom%\\Software\\Programs\\Alcohol\\crack.exe']
rdflt[pn]=['yes']
cat[pn]=['Programs']
picf[pn]=['alcohol.png']
picw[pn]=['270']
pich[pn]=['162']
pn++

содержание файла crack.exe (это sfx rar архив, распаковывающийся в каталог, куда уже поставился Алкоголь):

crack.exe
patch.exe
alcohol.reg

После распаковки запускается скрипт autoit такого содержания:

Код:


Run('patch.exe')

WinWaitActive ('Patch','Alcohol 120')
ControlClick ('Patch','Alcohol 120','Button1')

WinWait ('Patch','Alcohol 120')
Sleep(5000)
ControlClick ('Patch','Alcohol 120','Button3')

Exit

а файл alcohol.reg остался от старых версий, на всякий случай:

Код:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Alcohol Soft\Alcohol 120%\Info]
"UserName"="Denchik"
"Company"="Babylon 5"
"SerialNo"="ALCBCBCBCBC3T99TVJKK2G7XYBCVWDDB2MPCDR78YCDB2CCB289RTK234CD7MG7D43TC3M392C34V89T8DFJKBBT8MPMPQ6T8BB233HCDXXCCBCBCB"


CTEPBA 09-11-2005 22:53 372032

Проблема не в том что он не ставиться все, а вот что когда очередь доходит до него в WPI, то почемуто WPI закрывается а Alcohol продолжает установку и все приложения которые стояли после Alcohol не ставяться так, как уже выгруженно WPI.

Sanja Alone 10-11-2005 02:22 372094

CTEPBA
Цитата:

У меня закрывается WPI, а установка Alcohol продолжается?
Ну это наверно из-за ProcessClose ("rundll32.exe"). Логично? А воткнул ты это закрытие процесса в мой скрипт скорее всего по причине появления окна "мастер нового оборудования"?... Вот только закрывая rundll32.exe, ты, одновременно с выскочившим окном, закрываешь и окно установки прог, запускаемых из RunOnceEx (этот метод используется в WPI) через тот же самый rundll32. Твоя проблема решаема, а как - было сказано немного выше.


DenchikK
Цитата:

Алкоголь ставиться примерно так:
Это если через msi, а я делал через exe.

CTEPBA 10-11-2005 21:00 372463

Sanja Alone
Я уже сам догдался теперь использую
такой метод установки:
Код:

msiexec /qn /quiet /i setup.msi DRIVER0=a347bus DRIVER1=a347scsi INSTALLDIR="%programfiles%\Alcohol Soft\" /norestart
но окно все равно выскакивает, весит потом изчезает само, жалко это тормозит установку.

Sanja Alone 11-11-2005 01:21 372559

Добавил скрипт для Agnitum Outpost 3.0 (в архиве 2 скрипта: для версии 2.7 и для 3.0)


CTEPBA
Цитата:

но окно все равно выскакивает
И этот твик не помог?
Код:

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\DriverSearching]
"DontSearchWindowsUpdate"=dword:00000001
"DontPromptForWindowsUpdate"=dword:00000001

Может мы оворим о разных окнах? Если это какое-то другое окно, то можешь закрыть его с пом. функции AdlibEnable("имя_функции") - пример ее использования можешь посмотреть в моем скрипте для Pragma

XXXler 11-11-2005 16:52 372925

Блин, в сети случайно наткнулся на прогу Almeza Multiset, поставил - вроде делает примерно то-же+создает оболочку для CD (правда не блещущую интерфейсом :) )
Какие будут мнения?
(имхо, ручками в AutoIt конечно увереннее - знаешь что не промажешь, но на мой взгляд когда срочно и на скорую руку - прога то, что надо...)

CTEPBA 11-11-2005 22:36 373072

Sanja Alone
Насчет реестра я не пробовал, а окна это про "новое оборудование"

samsobi 15-11-2005 11:56 374089

В треде твиков задавали вопрос про установку режимов "НИКОГДА" для текущей схемы электропитания.
Когда мне тоже не помогли твики реестра по установке схемы питания "никогда", я сделал это через AutoIt, может корявое решение, но все работает прекрасно:

Код:

 
#cs
    ----------------------  Установка режимов "НИКОГДА" для текущей схемы электропитания  ----------------------   
#ce
Run( @WindowsDir & '\system32\rundll32 shell32.dll,Control_RunDLL powercfg.cpl' )     
WinWait( 'Свойства: Электропитание' )   
WinActivate('Свойства: Электропитание')   
ControlCommand ( 'Свойства: Электропитание', 'Отключение дисп&лея:', 'ComboBox2', 'SelectString' ,'никогда')   
ControlCommand ( 'Свойства: Электропитание', 'Отключение диско&в:', 'ComboBox3', 'SelectString' ,'никогда')   
ControlCommand ( 'Свойства: Электропитание', '&Ждущий режим через:', 'ComboBox4', 'SelectString' ,'никогда')   
ControlClick ( 'Свойства: Электропитание', '', 'Button5')


kovdaev 16-11-2005 12:41 374470

Поделитесь скриптом установки DRWEB 4.33
Заранее спасибо.

qeraser 16-11-2005 13:45 374496

kovdaev
Посмотри здесь
HTML код:

http://sanjaalone.h15.ru/au3.php

vserd 16-11-2005 14:15 374507

Всем доброго здравия!!!
Возникла такая проблемка как с помощью Autoit 2.63 ввести в поле ввода маленькую букву "я"
Код:

Send,"я"
или другую строку с "я" не срабатывает, вместо я вставляет пустую строку.

a_s_malyshev 16-11-2005 14:46 374515

Помогите. Существует проблема с набором русского текста в элементах управления.
Набираются буквы нормально только при русской расскладке клавиатуры.
Что мне нужно добавить в начало моего скрипта, чтобы расскладка автоматом переключалась на русскую?

Заранее спасибо

a_s_malyshev 16-11-2005 14:48 374517

Это будет происходить массово на разных компьютерах с помощью групповых политик. И сочетания клавиш для переключение расскладки у всех разная и язык по умолчанию тоже разный. Вот такая проблема?

Jangle 16-11-2005 19:15 374612

Доброго времени суток!

ВОт хотел бы попросить помощи в следующем вопросе: как с помощью AutoIt или в сочетании Autoit + Win Api (виндовских DLL- ок) послать скопировать файл на FTP?
Попробовал следующее (по - тупому):

Цитата:

$D = FtpSetProxy(2, "ftp:\\xxx.com:21", "zzzzzz", "ccccccc")
FileCopy ("C:\0.txt", $D)
но почему-то файл 0.txt копируется на рабочий стол с именем 1.txt

Спасибо всем

kovdaev 16-11-2005 20:33 374634

Спасибо qeraser.
Это действительно то, что нужно.

Sanja Alone 17-11-2005 01:55 374713

Добавил скрипт для ABBYY FineReader 8.0 Professional Edition (в архиве 2 скрипта: для версии 7.0 и для 8.0)


vserd
Цитата:

как с помощью Autoit 2.63 ввести в поле ввода маленькую букву "я"
1. Пора переходить на AutoIt 3.x (я тоже начинал с 2.64). Для конвертации имеющихся скриптов в новую версию можно исп-ть "v2 to v3 Converter" (AutoIt3\Extras\v2_to_v3_Converter\AutoItV2toV3.exe)
2. По сути. Вот два способа, навскидку:
Код:

;239 - ASCII-код символа "я"
Send("{ASC 239}")

Код:

;можно исп-ть доп. переменную:
$str = 'строка с "я" или чем угодно'
Send($str)

a_s_malyshev
Цитата:

проблема с набором русского текста в элементах управления...
Ответ чуть-чуть выше :) Ес-но, при этом au3-файл должен быть не в DOS (CP866) кодировке.

a_s_malyshev 17-11-2005 07:59 374747

Да нет проблема вот в чем, например:
Run("Notepad.exe")
WinWaitActive("Безымянный - блокнот")
Send("Привет")

Если при запуске блокнота стоит английская раскладка, то получаются ироглифы.
Если при запуске блокнота стоит русская раскладка, то получаются все нормально.
Вот мне и надо чтобы после открытия блокнота, какой-нибудь командой поменять расскладку клавиатуры на русскую.
И при этом файл должен не в DOS кодировке.

Sanja Alone 18-11-2005 02:53 375113

Добавил скрипты
Compare It 3.8.1660
Rar Key 7.0.1180


a_s_malyshev
1. Можешь прописать в реестр вот такие параметры, например:
Код:

;Переключние на Английский по Ctrl+Shift+1
[HKEY_CURRENT_USER\Control Panel\Input Method\Hot Keys\00000100]
"Virtual Key"=hex:31,00,00,00
"Key Modifiers"=hex:06,c0,00,00
"Target IME"=hex:09,04,09,04

;Переключние на Русский по Ctrl+Shift+2
[HKEY_CURRENT_USER\Control Panel\Input Method\Hot Keys\00000101]
"Virtual Key"=hex:32,00,00,00
"Key Modifiers"=hex:06,c0,00,00
"Target IME"=hex:19,04,19,04

Можешь вписывать скриптом эти параметры в реестр когда тебе будет нужно, а затем тем же скриптом удалять. Данные изменения применяются без перезагрузки системы, хотя Винда и пишет обратное при их ручной установке посредством языковой панели :)

Сочетание клавиш для последовательного переключения языков находится здесь HKEY_CURRENT_USER\Keyboard Layout\Toggle, например:
Код:

;левый Ctrl+Shift
[HKEY_CURRENT_USER\Keyboard Layout\Toggle]
"Hotkey"="2"
"Language Hotkey"="2"
"Layout Hotkey"="1"

;или
;левый Alt+Shift

[HKEY_CURRENT_USER\Keyboard Layout\Toggle]
"Hotkey"="1"
"Language Hotkey"="1"
"Layout Hotkey"="2"

selanec555
Цитата:

MultiSet автоматически устанавливет приложения, при этом ни надо писать ни каких скриптов!
...Нужно только заплатить 99$ за одну копию или найти крякнутую экзешку для старой версии 1.3 (текущая 1.5) и не иметь никакой возможности что-то подправить при неудовлетворительной работе какого-то "скрипта" программы...

a_s_malyshev 18-11-2005 07:56 375133

Огромное спасибо!!!
Пробую.

С уважением, Александр

selanec555 18-11-2005 14:05 375250

цена MultiSet
 
"
...Нужно только заплатить 99$ за одну копию или найти крякнутую экзешку для старой версии 1.3 (текущая 1.5) и не иметь никакой возможности что-то подправить при неудовлетворительной работе какого-то "скрипта" программы...
"

для русскоговорящих пользоватлей, насколькоя я понял регистрация 300руб.
смотрим тут:
http://www.almeza.com/press/rus/pay/pay.html

Sanja Alone 19-11-2005 00:29 375520

selanec555
Цитата:

для русскоговорящих пользоватлей
Все может быть... Как говорится: "на вкус и цвет..." Меня подобная прога изначально не устаивает, т.к. не позволяет внести хоть какую-то логику в скрипт. Возьмем в кач-ве примера "случайно" появляющиеся окна - данную прогу такое событие введет в ступор. Прибавим к этому невозможность проверки существования какого-то файла/каталога и т.д, и т.п. Я ставлю крест на такой проге, АднАзначнА! Хотя и не исключаю возможности ее использования кем-то для установки "простых" приложений при полном отсутствии желания тратить время на написание гораздо более функциональных АвтоИт-скриптов.

selanec555 20-11-2005 19:25 375953

Цитата:

Хотя и не исключаю возможности ее использования кем-то для установки "простых" приложений при полном отсутствии желания тратить время на написание гораздо более функциональных АвтоИт-скриптов.
Как мне кажется MultiSet - это решение для большинства простых пользователей, которым не надо думать как там написать скрипт для той или иной проги. = просто установил ее вместе с МultiSet и все, не паришься. А со скриптами АвтоИт надо еще и думать и после выхода очередной версии любимой проги надо скрипт переписывать, а если этих любимых прог 10, 20, 100, 500? Че все перелапачивать, нет уж нафиг, нафиг.
Ну в принципе скрипты конечно могут и пригодится но только в редких случаях, очень редких.
Не знаю как вам а я эту прогу уже использую!!!

fox_sly 20-11-2005 19:47 375964

selanec555
- ну а причем тут AutoIt скрипты, создайте тему и там описывайте, все что захочется, а насчет простоты установки полностью согласен с Sanja Alone - так как довольно часто встречаются нестандартные ситуации при установке популярных программ

CTEPBA 20-11-2005 20:07 375969

Sanja Alone
Цитата:

И этот твик не помог?



Код:

Код:

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\DriverSearching]

"DontSearchWindowsUpdate"=dword:00000001

"DontPromptForWindowsUpdate"=dword:00000001


Нет не помог, при первом вхоже он не помог, но если ставить Alcohol автоматом уже в полностью загруженной системе все ставиться и ничего не выскакивает, даже не заню как от это избавиться.

Sanja Alone 21-11-2005 01:39 376057

CTEPBA
Цитата:

но если ставить Alcohol автоматом уже в полностью загруженной системе все ставиться и ничего не выскакивает
Ну дак в этом и весь смысл данного твика - применить его на стадии установки Виндов. У меня, например, приведенный твик вносится в реестр из RegTweaks.reg через cmdlines.txt.

selanec555 21-11-2005 08:41 376094

Цитата:

- так как довольно часто встречаются нестандартные ситуации при установке популярных программ
Неужно на АвтоИт можно описать ВСЕ нестандартные ситуации? Или как? Для каждого сетапника все описывать?
Я к тому что есть решение гораздо удобнее. А решать каждому.

CTEPBA 21-11-2005 20:22 376329

Sanja Alone
У меня он тоже от туда вноситься, но ничего не пашет.

AlikPan 24-11-2005 13:08 377190

Интересная ситуация, может кто сталкивался ?
Кусочек скрипта для регистрации в сети (домен 2000):
...
$AUserName=@UserName
MsgBox(4096, "Имя пользователя (Login)", $AUserName)
...

Работает в WIN2000, WIN XP. Под WIN 98 ни в какую.
после регистрации то же срабатывает везде.
Ограничения WIN98 или глюка ?

Sanja Alone 25-11-2005 01:24 377382

AlikPan
Цитата:

Ограничения WIN98 или глюка ?
Первое. Под 9x-Окнами у АвтоИта вообще куча ограничений.

AlikPan 25-11-2005 08:07 377417

Sanja Alone
Спасибо.
А через реестр брать Login - это нормально ?

DenchikK 25-11-2005 23:59 377653

Проблема с последним окном в русификаторе для FastStone 2.28
http://www.4ru.info/FastStone.htm
Окно нафиг не определяется со всеми вытекающими...
Но вот что интересно - я забыл однажды снять из трея застопорившийся скрипт, и запустил его снова - окно видимо определилось, скрипт сработал.
Замучился уже, кучу вариантов перепробовал - не хочет работать!

Sanja Alone 26-11-2005 02:12 377666

AlikPan
Цитата:

А через реестр брать Login - это нормально ?
А какая разница? :)

DenchikK
Цитата:

кучу вариантов перепробовал
Через идентификаторы пробовал? (если нет - см. пример здесь).

EgOrus 26-11-2005 06:54 377681

DenchikK
а вариант с простым копированием FSViewer.ru в папку программы, не нравится?

DenchikK 26-11-2005 10:00 377687

EgOrus
Так то оно так, но просто хочется понять, как заставить работать инсталяху. Спортивная злость, как говорится.

Sanja Alone
Видать что-то я не так делаю - не получается.

a_s_malyshev 29-11-2005 11:13 378425

Подскажите. А можно ли как-нибудь получить список всех имен компьютеров с Dns- суффиксом (например: inf1.scool.ru) в анном домене с помощью AutoIt или же какой-нибудь другой программой например выгрузить в файл. Очень нужно

Sanja Alone 01-12-2005 03:14 378962

Добавил скрипты
AutoGordianKnot 2.20
FastStone Image Viewer 2.2x (Image Viewer + русификатор + Screen Capture + Photo Resizer)


DenchikK
Цитата:

Проблема с последним окном в русификаторе для FastStone
Да вроде все нормально... :search:


a_s_malyshev
Цитата:

как-нибудь получить список всех имен компьютеров
Может вот это подойдет:
NET VIEW - эта команда выводит список доступных для совместного использования ресурсов данного компьютера.
Kогда используется без параметров, отображает список компьютеров текущего домена или сети.

a_s_malyshev 03-12-2005 08:45 379394

Цитата:

Может вот это подойдет:
NET VIEW - эта команда выводит список доступных для совместного использования ресурсов данного компьютера
Команда хорошая, но мне нужно полные имена компьютеров.
Т.е. test.scool.r36.ru <- Что то вроде этого.
Они должны выдаваться из системы.
А не так чтобы я получил список с помощью команды net View а потом добавлял к элементам списка хвосты (scool.r36.ru).
Если какая-нибудь такая команда?

ghosty 06-12-2005 04:24 380274

Здравствуйте. Спасибо, что вы есть :)
Прошу помочь написать простенький (по-видимому) скриптик.

Имеется выделенный текст. При нажатии определенного сочетания кнопок этот текст необходимо сохранить в виде отдельного *.txt файла с названием
- либо соответствующим первым трем словам первой строки текста;
- либо просто порядковым номером (только как в этом случае отследить, какой порядковый номер в папке явл-ся последним)
в определенную папку.

Очень надеюсь на вашу помощь.

selanec555 08-12-2005 00:13 380915

Здравствуйте. Каким образом можно отловить AutoIt'ом перезагрузку ПК, у меня есть пара скриптов установки софта, дак вот так есть такие дистрибутивы котоые сами перезагрузают комп :( как это отловить/недопустить/корректно обработать? Спасибо.

Sanja Alone 11-12-2005 06:59 381833

ghosty
Цитата:

Имеется выделенный текст. При нажатии определенного сочетания кнопок этот текст необходимо сохранить в виде отдельного *.txt файла
Ну, можно вот так, например:
Код:

;предотвращение возможности множественного запуска скрипта
If WinExists(@ScriptName) Then Exit
AutoItWinSetTitle(@ScriptName)

;устанавливаем хоткей (в данном сл. это Ctrl+Alt+Z; выбор за тобой)
HotKeySet("^!z", "SaveToFile")

;определение каталога для сохранения файлов
Global $DestinationDir = "c:\working folder"
;запуск основного бесконечного цикла
While 1
Wend

Func SaveToFile()
;заносим выделенный текст в буфер обмена
Send ('^c')
;режим записи: 1 - дописывание данных; 2 - перезапись файла
$mode = 1
;имя файла (в данном сл. будет иметь вид ГодМесяцДень-ЧасыМинутыСекунды.txt, например 20051211-053438.txt)
$Destination = $DestinationDir & '\' & @YEAR & @MON & @MDAY & '-' & @HOUR & @MIN & @SEC & '.txt'
;если каталог назначения не существует - создаем его
If Not FileExists($DestinationDir) Then DirCreate($DestinationDir)
;берем данные из буфера обмена
$Data = ClipGet()
;запись данных в файл (совмещена с проверкой и выводом сообщения в сл. неудачи)
If WriteArrayToFile($Destination, $Data, $mode)<>1 Then MsgBox(16,'Error','Unable to write data to destination file',8)
EndFunc

;функция записи массива в файл
Func WriteArrayToFile($sFilePath, $Array, $writemode)
        Local $hOpenFile
        Local $hWriteFile
               
        $hOpenFile = FileOpen($sFilePath, $writemode)
       
        If $hOpenFile = -1 Then
                SetError(1)
                Return 0
        EndIf
       
        $hWriteFile = FileWrite($hOpenFile, $Array)
               
        If $hWriteFile = -1 Then
                SetError(2)
                Return 0
        EndIf
       
        FileClose($hOpenFile)
        Return 1
EndFunc

Цитата:

- либо соответствующим первым трем словам первой строки текста;
- либо просто порядковым номером
Можно и так, и так, но это сложнее и неудобнее.


selanec555
Цитата:

как это отловить/недопустить/корректно обработать?
MultiSet тут явно не поможет :) Нужно писать скрипты для этих приложений и обрабатывать данную ситуацию - либо ключами тихой установки с отменой перезагрузки, либо установкой клацаньем по окнам с отрицательным ответом на вопрос о перезагрузке.

Sanja Alone 14-12-2005 02:02 382826

Добавил скрипты
Anti-Blaxx 1.18
DAEMON Tools 4.00HE

kovdaev 16-12-2005 17:22 383835

Помогите написать скрипт нужно
вызвать "Свойства панели задач и меню пуск"
проверить стоят ли галочки в определенных местах если нет то установить галочки
затем закрыть окно.
Заранее спасибо.

Sanja Alone 17-12-2005 06:57 384015

kovdaev
Цитата:

Помогите написать скрипт
Лови:
Код:

;заголовок окна
Global $Title = 'Свойства'
;вызов окна 'Свойства панели задач и меню "Пуск"'
Run ('RunDll32.exe shell32.dll,Options_RunDLL 1')
;дожидаемся появления окна и активизируем его
WinWait ($Title)
WinActivate ($Title)
WinWaitActive ($Title)


;Далее идет непосредственно установка/снятие чекбоксов (измени/допиши то, что именно тебе нужно)

;Закрепить панель задач (поставить галку)

If ControlCommand ($Title,'','Button1','IsChecked','')=0 Then ControlCommand ($Title,'','Button1','Check','')
;Автоматически скрывать панель задач (снять галку)
If ControlCommand ($Title,'','Button2','IsChecked','')=1 Then ControlCommand ($Title,'','Button2','UnCheck','')
;...и т.д.

;Скрывать неиспользуемые значки (поставить галку)

If ControlCommand ($Title,'','Button7','IsChecked','')=0 Then ControlCommand ($Title,'','Button7','Check','')

;Закрыть окно (нажать кнопку "OK")
ControlClick ($Title,'','Button11')


bogomolv 17-12-2005 07:40 384017

kovdaev
Двумя страницами ранее уже приходлось писать, что
за поведение Панели Пуск отвечает ключ
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\StuckRects2]
"Settings"=

Настрой Панель под себя, скопируй ключ в reg-файл, а затем воспроизведи...

Sanja Alone
А зачем в твоем последнем скрипте проверка If ControlCommand ($Title,'','Button1','IsChecked','')=0 Then?

Sanja Alone 18-12-2005 01:33 384255

bogomolv
Цитата:

А зачем в твоем последнем скрипте проверка
Я, как и ты, настраиваю панель Пуск "реестровым" методом (причем еще на этапе установки Винды) и уже не помню, что там стоит "по умолчанию". Человек просил скрипт - я наваял, ну и влепил проверки для примера.

kovdaev 19-12-2005 15:33 384708

Ответ на вопрос зачем это нужно,
в моем случае пользователи делают что хотят, но когда начинаются проблемы зовут меня при этом, мне удобно когда скажем панель задач не убиралась с экрана, пришел запустил скрипт и все галочки стаят там где надо и не стоят где ненадо, мне кажется это удобно.
Спасибо большое за помощь.

asdfghjk 21-12-2005 22:08 385611

Кто-нибудь знает, как переключить раскладку клавиатуры в En, например? Пробовал API функцию - "LoadKeyboardLayoutA"
$result = DllCall("user32.dll", "long", "LoadKeyboardLayoutA", "str", "00000409", "long", 1)
не отрабатывает.

Имхо, прежде чем пользоваться SEND, не мешало бы переключить клавиатуру.

Sanja Alone 22-12-2005 02:45 385670

asdfghjk
Цитата:

Кто-нибудь знает, как переключить раскладку клавиатуры в En, например?
Немного выше я описывал один метод - не подходит?

Цитата:

Имхо, прежде чем пользоваться SEND, не мешало бы переключить клавиатуру.
АвтоИту все равно какая в данный момент раскладка - функция Send тупо посылает указанные символы. Единственная загвоздка возникает при висящих в памяти автопереключателях раскладки (Punto Switcher, Keyboard Ninja и т.п.) - но это опять-таки не вина АвтоИт-а, а юзера, забывшего закрыть процесс подобного приложения перед применением ф-ции Send.

asdfghjk 22-12-2005 13:19 385823

Спасибо за ответ. Вышеописанный метод я действительно не заметил. Однако,
Цитата:

функция Send тупо посылает указанные символы
Очевидно, у меня она наделена интеллектом.(В отличии от меня). Подобный код выдает русские сообщения в другой кодировке:
Код:

Run("notepad.exe")
WinWaitActive("Безымянный - Блокнот")
;Run("regedit /s en.reg")
 
Send("This is some text.", 1)
Send("{Enter}")
 
;Run("regedit /s ru.reg")
Send("Это текст на русском.")
Send("Это текст на русском.", 1)

Если запустить из-под русской раскладки, наоборот, латиницу неправильно отображает. Скрипт сохраняю в ANSI-кодировке. У кого-то правильно работает?
Закомментированные reg-файлы (переключение клавиатуры, как ты рекомендовал) не отрабатывают ни в скрипте, ни при запуске руками (точнее, отрабатывают: реестр правят, но на раскладку это не влияет). WinXP RUS SP2. Никаких автопереключателей клавиатуры нет.

Sanja Alone 23-12-2005 02:15 386013

asdfghjk
Цитата:

Скрипт сохраняю в ANSI-кодировке
Она же Win1251 (CP1251) - это правильно.

Цитата:

Run("regedit /s en.reg")
1. Любой импорт данных в реестр нужно делать при пом. ф-ции RunWait - т.е. нужно дождаться окончания операции импорта. Ф-ция Run просто запускает приложение/команду, указанную ей в кач-ве аргумента и (не дожидаясь завершения) скрипт идет дальше.
2. Ты не до конца понял описанный мной метод. Импортируя в реестр вышеуказанные ключи, ты просто включаешь возможность переключения на разные языки с пом. разных комбинаций клавиш. Но ведь для самого переключения нужно еще сделать Send('^+1') /Send('^+2')/, а не просто импортировать reg-файлик :)


Похоже я нашел причину твоих проблем - это Блокнот.
В Блокноте должен быть указан шрифт с кириллическим набором символов (а по ум. там Terminal - без такового). Вот нужная ветка реестра:
Код:

[HKEY_CURRENT_USER\Software\Microsoft\Notepad]
;набор символов (00000000 - западноевропейский, 000000cc - кириллический)
"lfCharSet"=dword:000000cc
;шрифт (обязательно с кириллическим набором, иначе будут кракозяблы).
;Примеры шрифтов с кириллическим набором символов: Arial, Times New Roman, Tahoma, Lucida Console.

"lfFaceName"="Tahoma"

P.S. Ты бы не извращался с импортом reg-файликов, а юзал ф-ции АвтоИта: RegWrite/RegDelete (лишние reg-файлы неудобны в подобных ситуациях). Если лень переводить reg в АвтоИт - можешь воспользоваться моим конвертером crta.

asdfghjk 24-12-2005 02:14 386367

Sanja Alone
Да, протупил я насчет Send('^+1'). Сейчас работает, только вместо точки "ю" вставляет.
Собственно, меня сей вопрос интересует только из любви к искусству. Практической необходимости в нем нет.
Хотелось бы все-таки уточнить, у кого-нибудь она (функция Send) просто "тупо посылает указанные символы "? Безо всяких раскладок клавиатуры.
Свой Блокнот я проверил - вышеописаные ключи соответствуют.

Sanja Alone 24-12-2005 09:54 386410

asdfghjk
Цитата:

у кого-нибудь она (функция Send) просто "тупо посылает указанные символы "?
У меня.
Для примера возьмем твой код:
Код:

Run("notepad.exe")
WinWaitActive("Безымянный - Блокнот")
Send("This is some text.")
Send("{Enter}")
Send("This is some text.", 1)
Send("{Enter}")
Send("Это текст на русском.")
Send("{Enter}")
Send("Это текст на русском.", 1)

Результат можешь посмотреть здесь


Я решил написать это в форуме, т.к. от подобной проблемы не застрахован никто. Дело в том, что на моей рабочей машине стоит WinXP SP1. Я проверил скрипт на VMWare с установленной WinXP SP2 - н-рые кириллические символы заменились кракозяблами. Логически поразмыслив о возможной причине подобного казуса, я пришел к выводу, что все дело в настройках кодовой страницы в самой Винде. Короче говоря, идем по многократно описанному в свете борьбы с кракозяблами пути, и смотрим, чтобы там было такое:
Код:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]
"1250"="c_1251.nls"
"1251"="c_1251.nls"
"1252"="c_1251.nls"
"1253"="c_1251.nls"
"1254"="c_1251.nls"

ВАЖНЫЙ момент! Буковки "c" должны быть в нижнем регистре ("c_1251.nls"). А у меня там были большие "C" ("C_1251.nls"). На SP1 это не влияло на ситуацию, а на SP2 стало причиной неправильного отображения н-рых (но не всех) кириллических символов в Блокноте - в других программах подобной зависимости на выявлено.

bogomolv 29-12-2005 00:53 387685

Sanja Alone

Саша, по поводу [HKLM\SYSTEM\CurrentControlSet\Control\Nls\CodePage] могу лишь процитировать очень уважаемого специалиста, советы которого ни разу не оказались сомнительными: http://forum.ixbt.com/topic.cgi?id=22:29304:2488#2488.

Добавлено, спустя 1 мин.
Извиняюсь за прямую ссылку. Посмотри ее копи-пастом...

Sanja Alone 29-12-2005 06:40 387731

bogomolv
Все это понятно, но какая есть альтернатива? К тому же, я не собираюсь смотреть немецкие/японские/китайские и т.п. сайты, а видеть меню того же Алкоголя мне приятнее на русском (а не каракулями или знаками вопроса) :)

Из описанных в приведеной тобой теме форума способов решения проблем "кракозяблов" значатся (насколько я понял):
  1. Cекция [RegionalSettings] файла winnt.sif. Тут у меня итак все выставлено правильно (ес-но, если оно реально применяется, а не игнорируется, как сказано здесь);
  2. Ветка HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes (а если посмотреть ту же статью, так это вообще составляющая часть первого способа);
  3. Ветка HKLM\SYSTEM\CurrentControlSet\Control\Nls\CodePage (тот самый, неправильный способ; часто применяется совместно с пунком 2).
Какой способ является подходящим по твоему мнению?

Vadikan 29-12-2005 07:45 387738

Sanja Alone
Я у себя (XP EN) только 1251="c_1251.nls" выставляю, а шрифты даже не импортирую :) Ну и regopts.txt применяю, чтоб не дергаться. У меня, впрочем, очень мало русского софта, а при наличии двух языков я выберу английский. Остальные кодовые страницы были внесены в статью по причине "стандартности" решения и его многократном тиражировании на страницах форума. О побочных эффектах мне известно, как-то Павел Городянский упоминал на страницах форума (его сайт http://ourworld.compuserve.com/homepages/PaulGor/ ), но в реальности, люди которые хотят избежать проблем с отображением кириллицы, могут никогда и не столкнуться с некорректным отображением других языков :)

spol81 29-12-2005 11:20 387807

Возможно ли сделать так, что бы весь процесс установки программы был невидим?

bogomolv 29-12-2005 14:46 387865

Sanja Alone
Там описан еще один способ. Его и использую.
Код:

===== файл unattend.txt ========
[Shell]
    DefaultStartPanelOff=Yes
  CustomDefaultThemeFile="C:\WINDOWS\Resources\Themes\Windows Classic.theme"

Проблем нет.

Sanja Alone 30-12-2005 04:04 388025

Vadikan
Цитата:

люди которые хотят избежать проблем с отображением кириллицы, могут никогда и не столкнуться с некорректным отображением других языков
Закончу твою фразу: ...потому, что не пользуются этими языками. Собс-но, весь сыр-бор по поводу правильности был затеян "из прЫнцыпа". Ладно, не буду продолжать, т.к. это уже явно не про АвтоИт :)


spol81
Цитата:

Возможно ли сделать так
Ответ на твой вопрос краток: Да. Но нужно бы конкретизировать задачу: какого именно приложения? Не у всех ведь есть ключи тихой установки (точнее, не все ими дают пользоваться). Для начала определи какой инсталлятор исп-ся в этом приложении, затем прочитай статью Типы инсталляторов. А уже потом обращайся к АвтоИту.


bogomolv
Цитата:

Там описан еще один способ
Угу, но я не посчитал его серьезным - нужно будет попробовать. Только потом придется привести все к более удобному виду ("Пуск" в 2 колонки):
Код:

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer]
"ShellState"=hex:24,00,00,00,33,a0,01,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  01,00,00,00,0d,00,00,00,00,00,00,00,03,00,00,00

На какой стадии применять этот твик, чтобы не превратить новоявленный правильный метод в новый вариант неправильного?

bogomolv 30-12-2005 09:25 388064

Sanja Alone

В моем unattend.txt стоит вообще-то CustomDefaultThemeFile="C:\WINDOWS\Resources\Themes\Моя тема.theme".
Так что, скорее всего, "приводить что-либо к более удобному виду не приходится...

Zhiberya 03-01-2006 05:42 388828

Здравствуйте!
У меня вопрос общего характера, пишу на autoit'е небольшой авторан, с возможностью выбора простой или тихой установки. Хочу вставить в него красивый прогресс бар.
Посмотрел в хелпе, есть 2 функции одна- GUICtrlCreateProgress(рисует сам прогресс бар), другая- GUICtrlSetData(задает значение в процентах прогрессбару). К чему привязать ход процесса в прогресс баре? К месту на жестком диске, не есть гуд, т.к. у меня ntfs и она сразу выделяет место под весь файл. К чему можно еще привязать прогресс бар??

Astarot 06-01-2006 13:28 389787

Пытался сейчас установить Alcohol 120%, но при запуске установки появляется окошко с ошибкой там написано
RunWait ( @ScriptDir&'\'&$file & ' /qn REBOOT=Suppress' )
Error: Unable to execute the external program.

Потом пытался поставить Outpost, но там подобная ошибка в этом месте Run ( @ScriptDir&'\'&$file )

Что я делаю не правильно?

Astarot 06-01-2006 13:50 389793

Всё сам разобрался ;) Просто не заметил что там название файла переменной присваивается.

a-v-g-u-r 06-01-2006 15:51 389827

Возникла следующая проблема:
требуется установить программу в папку, которая находится на том же диске, что и Windows.

Вопрос:
Существует ли какая-нибудь переменная окружения, в которой бы хранилось имя диска, на котором Винда установлена (что-нибудь по аналогии с @ScriptDir или @WindowsDir)? Может есть способ выдрать эту букву из какой-то из этих переменных.

Если вопрос покажется дебильным извиняйте, AutoIt'ом пользуюсь второй день

DmitryOlenin 06-01-2006 16:03 389833

bogomolv
Цитата:

===== файл unattend.txt ========
[Shell]
DefaultStartPanelOff=Yes
CustomDefaultThemeFile="C:\WINDOWS\Resources\Themes\Windows Classic.theme"
Вот только что попробовал такой способ (описанный еще ув. Vadikan).
Получилось... Но только при обычной установке. При установке с помощью WPI тема вроде как есть, но не применяется.
То есть в свойствах экрана стоит имя моего файла, но, при этом, тема стоит дефолтная(даже не дефолтная XP, а просто классическая, "необьемная").
Если выбрать ту же тему еще раз и нажать применить - все встает на свои места.

Что это и как побороть я пока не пойму. Может можно какой-то скрипт красивый сделать, чтобы вот так щелкать не приходилось?

specialist 06-01-2006 17:52 389850

DmitryOlenin
нужно еще использовать модифицированный файл uxtheme.dll
воспользуйся поиском и никакие авто скрипты тут не нужны, все ставится само собой должно. у меня работает.

DmitryOlenin 06-01-2006 20:17 389882

specialist
Я пользовался поиском. Естественно я использую модифицированный uxtheme.dll.
Хотя дело не в этом файле.
Во-первых, я написал, что при обычной установке(без WPI) тема прекрасно ставится.
Во-вторых, все изменение темы заключается в фоновой картинке(которая, кстати, другим путем уже прописана) и, главное, в измененных курсорах.

Sanja Alone 07-01-2006 02:22 389937

a-v-g-u-r
Цитата:

в которой бы хранилось имя диска, на котором Винда установлена
Вот тебе два варианта:
  1. @HomeDrive - Drive letter of drive containing current user's home directory.
  2. EnvGet("SYSTEMDRIVE") - более надежный способ, т.к. "current user's home directory" может быть и не на диске с Виндой.

bogomolv 10-01-2006 18:39 390886

DmitryOlenin
Цитата:

Получилось... Но только при обычной установке. При установке с помощью WPI тема вроде как есть, но не применяется.
А что такое - установке с помощью WPI?
Цитата:

Может можно какой-то скрипт красивый сделать...?
Так и делал раньше. Но что красивого в таком скрипте?

All
Что-то давно не было обновлений AutoIt!
Имевшаяся у меня версия v3.1.1 не позволила красиво реализовать одну функцию графического интерфейса. Полез за обновлениями. Новых официальных версий - нет. В "бетках" последней числится v3.1.1.100. Ее и взял.
Сразу нашел новый стиль $LVS_EX_CHECKBOXES для функции GUICtrlCreateListView , реализующий то, что меня интересовало. Но пост о другом - о том, что, скорее всего, ждет нас в новом релизе:
Новых функций мало. В основном фиксы, уточнения и новые возможности функций графического интерфейса и работы с внешними библиотеками и объектами.
Удивило, что при этом AutoIt3.exe "разросся" в объеме почти в полтора раза. И самое главное - авторы вновь (на моей памяти это происходит уже второй раз) изменили логику сравнений TRUE/FALSE. В итоге сразу перестали работать два моих скрипта. Придется проводить ревизию всей своей коллекции... :(
Нашелся и забавный глючок: если оператор #ce стоит в последней строке файла и не отбит "концом строки", это приводит последнюю бету в жуткое замешательство, и скрипт не стартует секунд 30-40, потом все работает, как надо.

DmitryOlenin 11-01-2006 23:20 391255

bogomolv
Цитата:

А что такое - установке с помощью WPI?
Это установка, в которой используется WPI. То есть программы можно выбирать. Об этой программе можно почитать например на ээтом же сайте и форуме.
Цитата:

Так и делал раньше. Но что красивого в таком скрипте?
А он остался? Я бы с радостью воспользовался.

Sanja Alone 12-01-2006 02:05 391292

Добавил скрипт
DaemonScript 1.6.0

bogomolv
Цитата:

А что такое - установке с помощью WPI?
WPI - прога для выбора устанавливаемых приложений (написана на JavaScript)
Вопросы по WPI
Выбор устанавливаемых приложений

Цитата:

изменили логику сравнений TRUE/FALSE
Конкретизируй.

bogomolv 12-01-2006 02:21 391295

DmitryOlenin
Код:

Run('rundll32 shell32, Control_RunDLL desk.cpl,,')
WinWaitActive ('Свойства: Экран','Темы')
ControlCommand ('Свойства: Экран','Темы', 'ComboBox1', 'SelectString', 'Моя тема')
ControlClick ('Свойства: Экран','Темы', 'Button5')
WinClose ('Свойства: Экран','Темы')

Цитата:

Об этой программе можно почитать
Да, вспомнил. Что-то такое встречалось. Но зачем она тем, кто дружит с AutoIt?
Пропиши в CMDLINES.TXT заветную строчку и подложи к CMDLINES.TXT два файлика. И задавай установку дров и программ, каких хочешь, на какой хочешь стадии и с какой тебе нужно логикой ...
Код:

=========CMDLINES.TXT==============
[Commands]
"AutoIt3.exe .\cmdlines.au3"
==========CMDLINES.AU3==============
FileCreateShortcut('@ScriptDir@\startup.au3','@StartupDir@\startup.lnk')
 
==========STARTUP.AU3==============
FileDelete ('@StartupDir@\startup.lnk')


bogomolv 12-01-2006 02:26 391296

Sanja Alone
Цитата:

Конкретизируй.
Я обломался на $srch=FileFindFirstFile().... If $srch=...
Таких изменений не одно. Скачай AutoIt3.chm и посмотри History.

Sanja Alone 13-01-2006 01:36 391744

Добавил скрипты
Avenger 1.0.5.9
Unlocker 1.7.7

bogomolv
Цитата:

Но зачем она тем, кто дружит с AutoIt?
Приложения лучше устанавливать имея возможность выбора, и наиболее удобный, imho, для этого способ - проставление "галочек", что и реализовано в WPI. К тому же, в последней версии введена поддержка конфиглистов (упрощенно говоря - это разные default-конфигурации). Выбрал, например "Home" - проставились все свои любимые проги, а "Office" - только необходимые и т.д. А в моей ситуации, когда приложения находятся на отдельном DVD, вариант cmdlines.txt исключен по определению.

bogomolv 13-01-2006 02:25 391758

Sanja Alone
Ключевое слово твоего поста - "любимые". В числе любимых прог, видно, оказалась и WPI. Против этого чувства бессисльны все доводы...
И только от нечего делать попридираюсь :)
1) $LVS_EX_CHECKBOXES для функции GUICtrlCreateListView в AutoIt как раз отвечает за галочки в списках;
2) какое такое определение исключает в приведенном мной варианте cmdlines.txt возможность его применения, когда приложения находятся на отдельном DVD?




Sanja Alone 14-01-2006 05:05 392208

bogomolv
Цитата:

Против этого чувства бессисльны все доводы...
Ты не прав. Я не прочь попробовать (и пробовал) и другие проги аналогичного назначения, конечно, если они будут для меня столь же удобны в настройке (прямое редактирование конфига, а не кривенький gui) и использовании. А из описанных в статье Vadikan-а, меня вполне устаивает WPI.
В желании приукрасить свой мультибутовый DVD с Виндами, я даже намеревался перейти от консольного bcdw к gui-шному EasyBoot, но неудобсто его настройки (нет прямого редактирования конфиг-файла) и невозможность выбора разных шрифтов (хотя бы для пункта меню и его описания) мне не понравились (конечно, можно к фоновой картинке "пририсовать" описания другим шрифтом, но это лишняя морока).

Цитата:

1) $LVS_EX_CHECKBOXES
:beta: в 3.1.1 этого нет; когда будет в новой финальной версии - посмотрим...
Цитата:

2) какое такое определение исключает
отсутствие этого самого cmdlines.txt на диске с софтом :) Хотя, ес-но, можно сделать запуск и через стандартный autorun.inf (как у меня сейчас стартует WPI).

:biggrin: Ну нет у меня желания ваять свой Гуи (то, что это несложно ты и сам знаешь) на АвтоИт-е, имея подходящую (ПОКА !) прогу для интересующих меня задач. Другими словами, я не хочу "изобретать велосипед", даже не взирая на то, что он и не идеален...

Если у тебя есть время и желание переплюнуть javascript-овый WPI на АвтоИте - дерзай. Если прога выйдет лучше (возможности АвтоИт-а всецело этому способствуют) и ты представишь ее на суд общественности, а не сделаешь только для себя, то я буду первым, кто перейдет с WPI на твой вариант.

bogomolv 14-01-2006 11:04 392253

Sanja Alone
Цитата:

и ты представишь ее на суд общественности, а не сделаешь только для себя, то я буду первым, кто перейдет с WPI на твой вариант
Нет, Саш, исходный посыл был совсем иным - не надо ни на что переходить, если есть AutoIt! Типа, нам не нужны чужие глюки, нам своих хватает. :)
Цитата:

$LVS_EX_CHECKBOXES - в 3.1.1 этого нет
В 3.1.1 есть $TVS_CHECKBOXES для GUICtrlCreateTreeView. Ей и пользовался. А GUICtrlCreateListView ближе по назначению к решавшейся задаче. Соответственно, код получается "красивше".

kovdaev 16-01-2006 14:12 393060

Не судите строго помогите с скриптом
Вызываем "Свойства папки"
Вкладка "Вид"
Проверка вкладок стоит ли отметка в определенных позициях.

Заранее спасибо.

bogomolv 17-01-2006 03:39 393389

kovdaev
Замени в скрипте, предложенном тебе Sanja Alone в http://forum.oszone.net/showpost.php...&postcount=260,
Run ('RunDll32.exe shell32.dll,Options_RunDLL 1') на Run ('RunDll32.exe shell32.dll,Options_RunDLL 0').
$Title у окошек сам догадаешься поменять или тоже "не судить тебя строго"? :)

kovdaev 17-01-2006 08:11 393407

Спасибо.

Facet 18-01-2006 00:20 393833

Вопрос к уважаемым специалистам от AutoIt:
"Тихая" установка Punto Switcher 2.9. (Специально взял себе попроще для начала)
-------------------------------------------------
If WinExists(@ScriptName) Then Exit

AutoItSetOption("TrayIconHide", 1)

BlockInput (1)

Run( "setup_ps29.exe")

WinWait("Установка")

If WinActive("Установка")=0 Then
WinActivate ( "Установка" )
EndIf

WinWaitActive("Установка")

ControlClick("Установка", "Готово", "Button3")

BlockInput (0)
-------------------------------------------------

ControlClick("Установка", "Готово", "Button3") - не работает. "Нажатие" батона не происходит.
Хотя посылка send("{ENTER}") вместо - "ControlClick" отрабатывает нормально, но не всегда же пользоваться
ENTERом. Мануал вроде полистал - выглядит типа всё нормально. В чём дело не пойму, может кто подскажет?
Меня тоже "Не судите строго".

Sanja Alone 18-01-2006 02:43 393863

kovdaev
Цитата:

Вызываем "Свойства папки" Вкладка "Вид"
Как вызвать тебе уже сказал Сергей; переключение между вкладками - Send('^{TAB}')Но проверить состояние галок на закладке "Вид" не получится, т.к. они находятся внутри эл-та SysTreeView - нынешний АвтоИт не умеет проверять состояние/устанавливать пункты такого эл-та управления (ф-ция ControlCommand() не умеет с ним работать).

Специально для тебя, как любителя настройки через окошки, дам эту ссылку - тут можешь посмотреть как вызвать интересующие тебя диалоговые окна (и множество других) через rundll32.


Facet
Цитата:

If WinExists(@ScriptName) Then Exit
Это строка в одиночку лишена смысла, т.к. окно АвтоИта по ум. имеет заголовок не @ScriptName, а "AutoIt <номер версии АвтоИта>" (afair). Нужно обязательно дописать и вторую строку AutoItWinSetTitle(@ScriptName) - изменение заголовка на имя стартовавшего скрипта. Логика здесь проста - если скрипт уже запущен и его невидимое окно "сидит" в памяти, то вторая строка, ес-но, была выполнена, а значит это окно имеет заголовок @ScriptName. След-но, при повторном запуске того же скрипта, условие в первой строке будет истиной и приведет к выходу из копии скрипта, давая возм-ть нормально отработать первому экземпляру.

Цитата:

В чём дело не пойму, может кто подскажет?
  1. эл-т управления ("Button3") может быть скрытым;
  2. имя эл-та управления может изменяться от запуска к запуску инталлятора (скажем, был "Button3", а в след раз стал "Button2");
  3. ф-ция ControlClick() тоже не во всех случаях помогает даже если первые два пункта и не имеют места быть.
Короче говоря, используй Send("{ENTER}") и не забивай себе зря мозги - тем более, что применив ф-цию WinWaitActive() до посыла Enter-а, ты можешь быть уверен в активности окна.

bogomolv 18-01-2006 03:46 393876

Facet
Punto Switcher можно установить еще "тише":
1) скопировать каталог с установленной программой;
2) воспроизвести сохраненные (со всеми нужными настройками) ветки реестра:
HKEY_CURRENT_USER\Software\Punto Switcher\2.8
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Management\ARPCache\Punto Switcher 2.8
HKEY_LOCAL_MACHINE\SOFTWARE\Punto Switcher\2.8
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Punto Switcher 2.8

В твоей версии Punto Switcher в конце приведенных веток реестра, очевидно, будет значиться версия 2.9.
Автозапуск Punto Switcher прячется в
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

kovdaev 18-01-2006 12:11 394028

Спасибо за пояснения Sanja Alone .
Я как раз на этом и застрял при проверке стоит галочка или нет,
уже хотел просить совета.
Но все равно спасибо. Возможно в дальнейшем разработчик добавит данную функцию в свою программу.

bogomolv 18-01-2006 19:20 394257

kovdaev
Выходит, я зря ехидничал?
Тогда в порядке извинения:
Код:

$hkey='HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced'
If RegRead($hkey,"NoNetCrawling")='0' Then
msgbox(0,'','Задан "Автоматический поиск сетевых папок и принтеров"')
Else
msgbox(0,'','"Автоматический поиск сетевых папок и принтеров" не задан')
EndIf
 
Exit
 
#cs
[HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
;Автоматический поиск сетевых папок и принтеров
"NoNetCrawling"=dword:00000001
;НЕ Автоматический поиск сетевых папок и принтеров
"NoNetCrawling"=dword:00000000
 
[HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
;Восстанавливать прежние окна папок при входе в систему
"PersistBrowsers"=dword:00000001
;НЕ Восстанавливать прежние окна папок при входе в систему
"PersistBrowsers"=dword:00000000
 
[HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\CabinetState]
;Выводить полный путь в панели адреса
"FullPathAddress"=dword:00000001
;НЕ Выводить полный путь в панели адреса
"FullPathAddress"=dword:00000000
 
[HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\CabinetState]
;Выводить полный путь в строке заголовка
"FullPath"=dword:00000001
;НЕ Выводить полный путь в строке заголовка
"FullPath"=dword:00000000
 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]
;Использовать простой общий доступ к Файлам (рекомендуется)
"forceguest"=dword:00000001
;НЕ Использовать простой общий доступ к Файлам (рекомендуется)
"forceguest"=dword:00000000
 
[HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
;Не кзшировать эскизы
"DisableThumbnailCache"=dword:00000001
;НЕ "Не кзшировать эскизы"
"DisableThumbnailCache"=dword:00000000
 
[HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
;Открывать каждую папку в отдельном окне
"SeparateProcess"=dword:00000001
;НЕ Открывать каждую папку в отдельном окне
"SeparateProcess"=dword:00000000
 
[HKСU\Software\Microsoft\Windows\CurrentVersion\Explorer\HideMyComputerIcons]
;Отображать "Панель управления" в папке "Мой компьютер"
"{21EC2020-3AEA-1069-A2DD-08002B30309D}"=dword:00000000
;НЕ Отображать "Панель управления" в папке "Мой компьютер"
"{21EC2020-3AEA-1069-A2DD-08002B30309D}"=dword:00000001
 
[HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
;Отображать описание для папок и элементов рабочего стола
"ShowInfoTip"=dword:00000001
;НЕ Отображать описание для папок и элементов рабочего стола
"ShowInfoTip"=dword:00000000
 
[HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
;Отображать простой вид папок в списке папок "Проводника"
"FriendlyTree"=dword:00000001
;НЕ Отображать простой вид папок в списке папок "Проводника"
"FriendlyTree"=dword:00000000
 
[HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
;Отображать сведения о размере Файлов в подсказках папок
"FolderContentsInfoTip"=dword:00000001
;НЕ Отображать сведения о размере Файлов в подсказках папок
"FolderContentsInfoTip"=dword:00000000
 
[HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
;Отображать сжатые или зашифрованные Файлы NTF5 другим цветом
"ShowCompColor"=dword:00000001
;НЕ Отображать сжатые или зашифрованные Файлы NTF5 другим цветом
"ShowCompColor"=dword:00000000
 
[HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
;Отображать содержимое системных папок
"WebViewBarricade"=dword:00000001
;НЕ Отображать содержимое системных папок
"WebViewBarricade"=dword:00000000
 
[HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
;Помнить параметры отображения каждой папки
"ClassicViewState"=dword:00000000
;НЕ Помнить параметры отображения каждой папки
"ClassicViewState"=dword:00000001
 
[HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
;Скрывать защищенные системные Файлы (рекомендуется)
"ShowSuperHidden"=dword:00000000
;НЕ Скрывать защищенные системные Файлы (рекомендуется)
"ShowSuperHidden"=dword:00000001
 
[HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
;Скрывать расширения для зарегистрированных типов Файлов
"HideFileExt"=dword:00000001
;НЕ Скрывать расширения для зарегистрированных типов Файлов
"HideFileExt"=dword:00000000
 
[HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
;Не показывать скрытые Файлы и папки
"Hidden"=dword:00000002
;Показывать скрытые Файлы и папки
"Hidden"=dword:00000001
 
[HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer]
;Показывать и обрабатывать пару как единый файл
"NoFileFolderConnection"=dword:00000000
;Показывать обе части и обрабатывать их отдельно
"NoFileFolderConnection"=dword:00000001
;Показывать обе части, но обрабатывать их как единый Файл
"NoFileFolderConnection"=dword:00000002
 
#ce

Но, может, все-таки лучше задавать эти параметры напрямую через реестр?

kovdaev 18-01-2006 20:58 394302

Сегодня вечером попробовал все работает.
Можно еще один вопрос по скрипту drweb?
Сам вопрос:
Если разрешение экрана самое низкое 800х640, стандартный драйвер windows, часть кнопок за пределами экрана и скрипт не работает, не приятно однако:
сам скрипт:

#cs
----------------------
Приложение: Dr.Web
На какой(их) версии(ях) тестировалось: 4.33

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

$Title - заголовок окна установки
$file - установочный файл
$programgroup - в какую программную группу положить ярлыки программы
$validkey - Легальный ключевой файл (положите его в любой подкаталог текущего, по ум это validkey)

Для регистрации программы нужно положить файл drweb32.key в каталог из к-рого запускается установка,
тогда файл-ключ будет скопирован в каталог DrWeb-а и программа будет зарегистрирована (если ключ подойдет).
Это в идеале, но т.к. тихая установка в версии 4.33 не работает, и при обычной установке с правильным key-файлой
запускается антивирусная проверка (к-рую нельзя отменить), то лучше положить в установочный каталог невалидный ключ, а
"правильный" скопировать в каталог установленного DRWeb-а уже после завершения инсталляции.

Файл setup.iss внутри этого архива - для версии 4.32b.
Я дополнительно вложил в архив еще и setup.iss для 4.33 - может у кого-то, как-то получится заставить заработать тихую установку и для этой версии.
----------------------
#ce
Global $Title='Установка Dr.Web', $file='drweb-433-win-ru.exe', $programgroup='Антивирусы\Dr.Web', $validkey=@ScriptDir & '\validkey\drweb32.key'
Run ( @ScriptDir&'\'&$file )
WinWaitActive ( 'Dr.Web - InstallShield Wizard' )
Send("{ENTER}")
WinWait ( $Title, 'Вас приветствует программа' )
WinActivate ( $Title, 'Вас приветствует программа' )
WinWaitActive ( $Title, 'Вас приветствует программа' )
Send("{ENTER}")
WinWaitActive ( 'Внимание!!!' )
;поставить галку "Да, на компьютере не установлено других антивирусных продуктов."
ControlClick ( 'Внимание!!!', '', 'Button4' )
Send("{ENTER}")
WinWaitActive ( $Title, 'Лицензионное соглашение' )
;выбрать "Я &принимаю условия лицензионного соглашения"
ControlClick ( $Title, 'Лицензионное соглашение', 'Button3' )
Send("{ENTER}")
WinWaitActive ( $Title, 'Выбор папки назначения' )
;по ум. C:\Program Files\DrWeb
$InstPath = ControlGetText ( $Title, 'Выбор папки назначения', 'Static4' )
Send("{ENTER}")
WinWaitActive ( $Title, 'Вид установки' )
;Обычная
Send("{ENTER}")
WinWaitActive ( $Title, 'Выбор папки' )
ControlSetText ( $Title, 'Выбор папки', 'Edit1', $programgroup )
Send("{ENTER}")
WinWaitActive ( $Title, 'Начало копирования файлов' )
Send("{ENTER}")
AutoItSetOption("MouseCoordMode",2)
WinWaitActive ( $Title, 'Настройки прокси сервера' )
MouseClick("left", 639, 472, 1, 0)
;это окно появляется только в сл. неподходящего key-файла
WinWaitActive ( 'Вопрос', 'Не обнаружено коммерческого или демонстрационного ключевого файла' )
ControlClick ( 'Вопрос', 'Не обнаружено коммерческого или демонстрационного ключевого файла', 'Button2' )
;и сразу идет переход к завершению установки
WinWaitActive ( $Title, 'Программа InstallShield Wizard завершена' )
;выбрать "Нет, перезагрузить компьютер позже."
ControlClick ( $Title, 'Программа InstallShield Wizard завершена', 'Button2' )
Send("{ENTER}")
Sleep ( 50 )
RunWait ( @Comspec & ' /C taskkill.exe /F /IM notepad.exe /IM spidernt.exe', '', @SW_HIDE )
;копирование рабочего ключевого файла в каталог антивируса (если файл существует)
If FileExists ( $validkey ) Then FileCopy ( $validkey, $InstPath & '\', 1 )
;копирование дополнений к базе вирусов в каталог DrWeb-а (если они есть)
If FileExists ( @ScriptDir & '\drw?????.vdb' ) Then
FileCopy ( @ScriptDir & '\drw?????.vdb', $InstPath & '\drw?????.vdb', 1 )
FileCopy ( @ScriptDir & '\drw?????.txt', $InstPath & '\drw?????.txt', 1 )
EndIf
;удаление ярлыка с рабочего стола
FileDelete ( @DesktopCommonDir & '\Сканер Dr.Web.lnk' )
ProcessWaitClose ( $file )
;BlockInput ( 0 )

Может автор поправит,
Это я к чему, может еще кому пригодиться.

Заранее спасибо.

Facet 19-01-2006 03:21 394410

bogomolv

Цитата:

Punto Switcher можно установить еще "тише":
Спасибо, но дело не в том, чтобы просто получить "тихий" инсталлятор" Punto Switcher.
Я его попросту перепаковал InnoSetupом вместе со всеми ключами реестра и файлами, а установщик InnoSetup отлично поддерживает "тихие" ключи при инсталляции.
В порядке "освоения" AutoIt хотелось понять из-за чего не работает вроде бы нормальный скрипт.

А за ключи благодарствую - я оказывается
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Management\ARPCache\Punto Switcher 2.8"
не включил в установщик, сейчас перекомпилирую.

Спасибо, также Sanja Alone. То-то мне показалось, что батоны меняют номера. Значит такое действительно может быть.
И за поправку "If WinExists(@ScriptName) Then Exit".

Sanja Alone 19-01-2006 03:37 394412

kovdaev
Цитата:

Если разрешение экрана самое низкое 800х640
Точнее 800x600. Вот это да, а разве ниже где-то еще бывает :) У меня на VMWare при всех тестах стоит 800x600.

Цитата:

часть кнопок за пределами экрана и скрипт не работает, не приятно однако:
Не работала вот эта ф-ция - MouseClick("left", 639, 472, 1, 0). Я дописал проверку с последующим сдвигом окна - теперь все ОК даже при архаичном 640x480. А если сильно захочется потестить при 320x240 (320x200), то еще больше сдвинь окно (не -200, а -300-400) - но это уже клиника...

Цитата:

сам скрипт:
Приводить здесь листинг не требовалось - это напрасное засорение форума. У меня ведь он и так есть :)

Цитата:

Может автор поправит
Уже.

ANGRO 19-01-2006 20:00 394768

Предлогаю вот такое решение вопроса переключения языка клавиатуры.Основанное на функциях WinAPI.
Работать должно начиная с Win98.
Код:


Opt("WinTitleMatchMode", 4)
Run("notepad.exe")
Sleep(500)
$hWnd = WinGetHandle("classname=Notepad")
_SetKeyboardLayout("00000409", $hWnd)
 
Func _SetKeyboardLayout($sLayoutID, $hWnd)
Local $WM_INPUTLANGCHANGEREQUEST = 0x50
Local $ret = DllCall("user32.dll", "long", "LoadKeyboardLayout", "str", $sLayoutID, "int", 0)
DllCall("user32.dll", "ptr", "SendMessage", "hwnd", $hWnd, _
"int", $WM_INPUTLANGCHANGEREQUEST, _
"int", 1, _
"int", $ret[0])
EndFunc
Exit

Дополнительные языки.

Код:

"00000407" Немецкий (стандартный)
"00000409" Английский (США)
"0000040C" Французский (стандартный)
"0000040D" Финский
"00000410" Итальянский
"00000415" Польский
"00000419" Русский
"00000422" Украинский
"00000423" Белорусский
"00000425" Эстонский
"00000426" Латвийский
"00000427" Литовский


Sanja Alone 24-01-2006 01:10 396429

Внес существенные изменения в свой конвертер crta (ConvRegToAu3)

2006-01-31
  • Добавлен индикатор выполнения (активируется ключом /b или параметром ProgressBar в ini-файле).
2006-01-30
  • Введена возможность исправления ошибок в строковых параметрах содержащих "возврат каретки" внутри (regedit при экспорте таких параметров в reg-файл ошибается) - отменяется ключом /f или параметром FixSZErr в ini-файле.
2006-01-29
  • Ужесточены условия проверок типов - мне они представляются однозначными. Допускается любое к-во символов равно '=' в названиях и в значениях любых параметров.
  • Обрамляются кавычками ветки/параметры в сл. использования команды REG ADD для пустых параметров типа "REG_MULTI_SZ" - сразу недосмотрел. При сложных для конвертации комбинациях символов в названиях таких параметров в рез. файл пишется соотв-щее предупреждение. А в сл. неприменения REG ADD, для данных параметров всегда пишется предупреждение о неправильности рез-та подобной конвертации. (ищите строки, начинающиеся с ;--- WARNING).
  • При невозможности конвертации любого параметра (из поддерживаемых конвертером типов) в результирующий файл пишется соотв-щее сообщение с информацией о номере строки исходного файла явившейся источником проблемы (ищите строки, начинающиеся с ;--- ERROR).
  • Появилась возможность установки приоритета процесса конвертера (ключи /p0 /p1 /p2 /p3 /p4 /p5; параметр Priority в ini-файле).
2006-01-27
  • Значительно (почти в 10 раз!) повышена скорость работы - тестовый файл вместо 4,5 мин. конвертируется около 30 сек.
  • Полностью устранены проблемы с одинарными кавычками в названиях веток, в названиях всех параметров, а также внутри "REG_MULTI_SZ" параметров (') - любое к-во таких символов теперь будет правильно преобразовано в последовательность Chr(39).
  • Введена возможность конфигурирования посредством ini-файла (см. комментарии в файле crta.ini). Ключи командной строки, как и положено, имеют больший приоритет, чем параметры ini-файла.
  • Добавлена возможность импорта в реестр пустых параметров типа "REG_MULTI_SZ" [hex(7):00,00 и hex(7):00] c пом. команды REG ADD. Cам AutoIt не умеет этого делать - все подобные строки превращаются в аналог hex(7):00,00,00. Отменить функцию можно ключом /r - тогда в результирующий файл будет записано предупреждение об ошибке.
  • Игнорирование параметров типа "REG_NONE" [hex(0)].
2006-01-23
  • Исправлена работа с многострочными параметрами типа "REG_MULTI_SZ" (теперь добавляются переносы строк @LF и параметры корректно импортируются в реестр - раньше же все превращалось в одну длинную строку).
  • Дополнено распознавание параметров "REG_BINARY" (hex и hex(3)). Это была не моя ошибка, просто regedit всегда экспортирует параметры типа "REG_BINARY" как hex, а довольно часто используемый мной RegShot (в редакции ParaGlider-а) - как hex(3). Оба варианта правильны.
  • Игнорирование параметров типов "REG_DWORD_BIG_ENDIAN" [hex(5)], "REG_LINK" [hex(6)].
  • Теперь в результирующий файл пишутся строки RegWrite('ветка') только если в reg-файле есть соотв-щая пустая (без параметров и подветок внутри) ветка. Это сделано для оптимизации результирующего autoit-скрипта, путем сокращения лишних действий в оном.
  • Переписан разбор командной строки - ключи теперь независимы, также их можно писать слитно (например: crta in.reg /c/h/d). Добавлен новый ключ /h - копировать в буфер обмена только результат последней конвертации (текущее содержимое результирующего файла пропускается; используйте совместно с ключем /c).
страница загрузки
история изменений

elakt 26-01-2006 08:09 397261

Добрый день ! У меня такая задача:

Есть несколько программ для загрузки прайс-листов разных поставщиков товара. Необходимо последовательно: запустить каждую из них, получить прайс-лист, закрыть программу, запустить следующую. Как я понял, с помощью AutoIt это сделать вполне реально.

Теперь ВОПРОС: можно ли выполнить перечисленные действия так, что бы программы для загрузки прайс-листов запускались НЕВИДИМЫМИ, при условии, что все программы ведут диалог с пользователем (задаются вопросы с вариантами выбора типа "Обновить / Отмена" ???

Если можно, то начну разбираться с AutoIt.
Напишите, пожалуйста, в общих чертах как это сделать, или посоветуйте - где об этом можно почитать.

Спасибо.

lemon76 26-01-2006 14:52 397404

Добрый день!
Нужна помощь профи. Есть программа, управление которой я хочу автоматизировать при помощи AutoIt. Суть проблемы в том, чтобы узнать какого цвета пиксел в данной точке экрана, черный или белый? Есть ли в AutoIt методы "считывания" цвета пиксела в заданной точке?
Заранее спасибо!

Sanja Alone 27-01-2006 05:43 397650

elakt
Цитата:

можно ли выполнить перечисленные действия
Да. Что-то похожее здесь уже спрашивали - вот, что я предложил.
Цитата:

запускались НЕВИДИМЫМИ
См. флаг @SW_HIDE ф-ций Run() и RunWait().
Цитата:

где об этом можно почитать
В файле %ProgramFiles%\AutoIt3\AutoIt.chm.


lemon76
Цитата:

Есть ли в AutoIt методы "считывания" цвета пиксела в заданной точке?
PixelGetColor ( x , y )

elakt 27-01-2006 09:12 397693

Спасибо за ответ! Теперь появились новые вопросы.

1. Запускаем блокнот в невидимом окне:
Run("notepad.exe", "", @SW_HIDE)

2. Далее мне нужно дождаться, когда это окно появится. Среди стандартных команд не нашёл ту, которая дожидалась бы появления НЕВИДИМОГО окна, поэтому использовал команду задержки Sleep, что бы дождаться загрузки блокнота. ВОПРОС: можно ли решить эту задачу иначе?

3. После того, как блокнот загрузился, посылаю ему строку текста:
ControlSend("Безымянный - Блокнот", "", "Edit1", "Send text to notepad")

4. Затем посылаю команду, которая в меню блокнота выбирает пункт "Выход":
WinMenuSelectItem("Безымянный - Блокнот", "", "&Файл", "В&ыход")

5. После этого на экране появляется окно с вопросом "Сохранить изменения? Да/Нет/Отмена" - не смотря на то, что основное окно блокнота невидимо! Ответить на этот вопрос проблем не составляет, но... ВОПРОС: как избежать появления окна с вопросом на экране? То есть что бы оно, как и основное окно, было невидимым? Можно дождаться его появления и "спрятать" командой WinSetState, но в этом случае окно всё равно мелькнет на экране. Как быть?

elakt 27-01-2006 13:35 397790

Еще вопросы:

1. Нужно дозвониться до провайдера, выполнить некоторые действия, разорвать соединение. Это нужно сделать в НЕВИДИМОМ режиме, то есть без отображения окон. Как это можно сделать?

2. Как проверить, есть ли соединение с интернетом?

3. Как проверить, активно ли соединение с заданым именем?

Sanja Alone 29-01-2006 05:08 398444

elakt
Цитата:

как избежать появления окна с вопросом на экране?
WinKill(""). Но мне неясна цель подобных действий. Если тебе нужно просто выдать сообщение, то есть другие вар-ты - банальный MsgBox(). А если ты хочешь незаметно записать что-то в файл, то для этого вообще не нужен Блокнот.

Цитата:

Еще вопросы:
В плане работы с сетью AutoIt пока откровенно беден. Посмотри раздел справки Network Functions
  1. Поискать инфу по ключам звонилки (если они есть).
  2. Макросы @InetGetActive - Is 1 if a InetGet download is currently active, otherwise is 0. @InetGetBytesRead During a InetGet download this is the number of bytes currently read. It is -1 when there is an error downloading. Доступность конкретного хоста - Ping ( address or hostname [, timeout] ).
  3. С таким условием никак.

elakt 30-01-2006 09:25 398791

Sanja Alone
Цитата:

Но мне неясна цель подобных действий.
Есть некая программа для получения прайс-листа и отправки заказа поставщику. Ключи для автоматического получения/отправки эта программа не поддерживает, все операции нужно выполнять нажатием соответствующих кнопок, подтверждать выбор, отвечать на вопросы программы.

Цель - автоматизировать этот процесс. Желательно так, что бы все действия были "невидимы" для пользователя и выполнялись в фоне. Блокнот использовался только для примера.

Если я правильно понял, то можно "спрятать" главное окно программы, но нельзя избежать отображение диалогов программы с пользователем?

__Koval__ 30-01-2006 13:37 398930

как с помощью AutoIt сменить раскладку клавиатуры.
а то столкнулся с такой проблемой:
у меня язык по умолчанию английский стоит, а винда русская,
так вот при написании скрипта управления блокнотом не работают горячии клавиши
т.е. сочетания ALT+,CTRL+ и т.д. с русскими символами пока включена английская раскладка.
Send("{ALT down}")
Send("{ALT up}")
Send("{ф down}")
Send("{ф up}")
вот не работает если не сменить раскладку.

как мне быть?

godoo 30-01-2006 15:53 398990

2All
Помогите разобраться как сделать пренос стороки при использовании функции SplashTextOn:
SplashTextOn("", "Длинный текст", 600, 400, -1, -1, 1, "Comic Sans MS", "14", "500")
Надо принудительно расставить переносы, т.к. автоматически получается некрасиво.


boss911 30-01-2006 16:28 398994

__Koval__

А ты не пробЫвал править через реестр, расскладку клавиатуры, или я твою проблему не правильно понял!?

__Koval__ 30-01-2006 17:00 399003

boss911Конечно не правильно :)
Не работают комбинации спецклавишь с русскими символами пока раскладка английская.

__Koval__ 30-01-2006 18:23 399034

да и вот еще что не понимаю почему не работает эта команда:
Run("WinRAR.exe", "D:\0NoInstall\WinRar\", @SW_MAXIMIZE)

Sanja Alone 31-01-2006 04:34 399205

elakt
Цитата:

Есть некая программа для получения
Меня не это озадачило. Зачем тебе писать текст в Блокноте при пом. АвтоИта, если можно просто вывести сообщение?
Цитата:

но нельзя избежать отображение диалогов программы с пользователем?
Да, если так была написана та программа.


__Koval__
Цитата:

как с помощью AutoIt сменить раскладку клавиатуры.
Можно так (через реестр) или так (сам я этот метод не проверял).
Цитата:

не работает эта команда:
Второй параметр - это рабочий каталог, а не путь. А в первом параметре указывается полный путь, а не имя экзэшника. Правильно писать так:
Код:

Run("D:\0NoInstall\WinRar\WinRAR.exe", "", @SW_MAXIMIZE)
или так:
FileChangeDir ( "D:\0NoInstall\WinRar\" )
Run("WinRAR.exe", "", @SW_MAXIMIZE)


godoo
Цитата:

Помогите разобраться как сделать пренос стороки
Также, как и всегда: "Длинный текст" записать в виде 'строка 1' &@LF&'строка 2' &@LF&'строка n'.

Matroskin13 31-01-2006 09:24 399249

Помогите разобраться с установкой PowerDVD.

Написал скрипт:

Код:

run("SETUP.EXE")

WinWaitActive ("PowerDVD Setup", "Welcome to the InstallShield Wizard for PowerDVD")
ControlClick  ("PowerDVD Setup", "&Next >", "Button1",)

WinWaitActive ("PowerDVD Setup", "End User License Agreement")
ControlClick  ("PowerDVD Setup", "&Yes", "Button2",)

WinWaitActive ("PowerDVD Setup", "Installing Following Programs")
ControlClick  ("PowerDVD Setup", "&Next >", "Button1",)

WinWaitActive ("PowerDVD Setup", "Installing Following Programs")
ControlClick  ("PowerDVD Setup", "&Next >", "Button1",)

WinWaitActive ("PowerDVD Setup", "Please enter your information")
Send("User")
Send("{TAB}")
Send("Company")
Send("{TAB}")
Send("MV588995988G2285")
ControlClick  ("PowerDVD Setup", "&Next >", "Button2",)

WinWaitActive ("PowerDVD Setup", "Choose Destination Location")
ControlClick  ("PowerDVD Setup", "&Next >", "Button1",)

WinWaitActive ("PowerDVD Setup", "Select Program Folder")
ControlClick  ("PowerDVD Setup", "&Next >", "Button2",)

WinWaitActive ("PowerDVD Setup", "Please select your default PowerDVD skin")
ControlClick  ("PowerDVD Setup", "&Next >", "Button2",)

WinWaitActive("PowerDVD Setup", "CLPV and CLEV")
ControlClick  ("PowerDVD Setup", "&Next >", "Button1",)

WinWaitActive("PowerDVD Setup", "Yes, I want to register now")
Send("{Space}")
Send("{TAB}")
Send("{Space}")
Send("{TAB}")
Send("{Space}")

Не понимаю - иногда срабатывает, иногда останавливается на страничке ввода персональных данных и ключа диска.
Помогите!

__Koval__ 31-01-2006 14:13 399354

Sanja Alone
Цитата:

или так (сам я этот метод не проверял).
За то я проверил, все отлично работает. Огромное спасибо.



А можно ли как нибудь по ярлыкам кликать, не используя метод координат?

godoo 31-01-2006 14:44 399364

__Koval__
Попробуй ALT и стрелки. Например у меня так отлично работает:
Send ( '{ALT}' & '{RIGHT}' & '{RIGHT}' & '{RIGHT}' & '{RIGHT}' & '{UP}' & '{ENTER}' & '^+{TAB}' ) - до нужной закладки в меню, а потом ControlClick-ами

Sanja Alone
Огромное спасибо всё получилось!

__Koval__ 31-01-2006 16:32 399405

godoo
так ведь не всегда известно точное положение ярлыка вот в чем фишка.

elakt 01-02-2006 10:10 399579

Sanja Alone
Цитата:

Меня не это озадачило. Зачем тебе писать текст в Блокноте при пом. АвтоИта, если можно просто вывести сообщение?
Блокнот был призван ПРОИЛЛЮСТРИРОВАТЬ проблему, которая возникла в другой программе и не более того :-)

Sanja Alone
Цитата:

Да, если так была написана та программа.
Ценное замечание. Делаю вывод, что не все программы ведут себя подобным образом.

Спасибо Sanja Alone!

Aspirine 01-02-2006 16:42 399699

Пдскажите, можно ли написать такой скрипт, чтобы во время установки программ блокировал клаву, и мог разблокировать только по паролю, или горячим клавишам. А то поставишь сразу нескольким юзверям ставить софт, а они все лезут что-то менять, трогать т.д.

Sanja Alone 01-02-2006 23:01 399804

Matroskin13
Цитата:

иногда срабатывает, иногда останавливается
Очевидно, что Send("{TAB}") иногда просто не успевает перейти к след. эл-ту управления. Решений два:
  1. Увеличить задержку Opt("SendKeyDelay", x) - значение x по ум. равно 5 мс. Поставь, например 20;
  2. Вместо Send()-ов исп-ть ControlSetText ( "title", "text", controlID, "new text" ).


__Koval__
Цитата:

А можно ли как нибудь по ярлыкам кликать
Хоть в этом и нет особого смысла (т.к. ярлык - это ссылка с картинкой), но можно так:
Код:

;каталог с ярлыком
$dir=@DesktopDir&'\'
;имя ярлыка
$lnk='VMware Workstation'
Run(@ComSpec & ' /c start ' & FileGetShortName($dir&$lnk&'.lnk'))

А чем тебе не подходит обычный запуск проги с указанием пути Run('путь\прога.exe')?


Aspirine
Цитата:

Пдскажите, можно ли написать такой скрипт, чтобы во время установки программ блокировал клаву
BlockInput(1)
Цитата:

и мог разблокировать только по паролю, или горячим клавишам
И как ты себе это представляешь при заблокированном вводе :) Снятие блокировки - BlockInput(0)

Aspirine 02-02-2006 14:38 399992

Sanja Alone
Цитата:

И как ты себе это представляешь при заблокированном вводеСнятие блокировки - BlockInput(0)
Виноват, ступил. А мышка блокирутся при BlockInput(1)?
Может можно сдеалть, что бы снималась блокировка после определённого, последовательного нажатия епо кнопкм мыши.



bogomolv 02-02-2006 20:10 400127

Молодежь! :)
Вы не перепутали эту ветку с горячей линией службы поддержки? Вынь-да-положь им решение!
Я о "А мышка блокирутся при BlockInput(1)?" и пр.
А слабо проверить? Это займет меньше времени, чем написание поста!

All
Страсть, как хочется похвалиться! :)
Часто нужный параметр прячется в реестре по "адресу", содержащему ID железки или пользователя, ключ безопасности и пр. Для таких случаев в AutoIt есть оператор RegEnumKey(). Однако при этом нужно выстраивать циклы, делать проверки и т.д.
Нашел красивое решение подбной задачи, когда мне нужно на стадии CMDLINES узнать будущее разрешение экрана устанавливаемой Windows.
Код:

If RunWait('@ComSpec@ /C reg query "HKLM\SYSTEM\CurrentControlSet\Control\DeviceClasses" /s | find "DefaultSettings.XResolution" | find "500"','',0)=0 Then $screen=1280
ElseIf RunWait('@ComSpec@ /C reg query "HKLM\SYSTEM\CurrentControlSet\Control\DeviceClasses" /s | find "DefaultSettings.XResolution" | find "400"','',0)=0 Then $screen=1024
Else
$screen=800
EndIf


Cherepan 03-02-2006 01:11 400239

Прастите чайника :sorry: (тем более, что не в тему - ну не нашел я тему :-) )

Нада вставить путь из переменной "$path") в поле Edit
Делаю примерно так:
Код:

ControlFocus ( "title", "text", "Edit")
ControlSend ( "title", "text", "Edit", $path)

В результате в поле вставляется какая-то лабуда типа "C:\Ё ЁigЁiЁ FiЁEs\ЁiЁi ЁiFTWAE\ЁEEFAЁ Ё ЁiFEЁiЁEAL" :blink:

VelDmi 03-02-2006 06:56 400292

Cherepan
Такая лабуда обычно получается, если включена не та раскладка клавиатуры. Например в винде стоит русский, а писать пытаешься по английски.

Cherepan 03-02-2006 17:07 400480

VelDmi
Ага... Нада попробовать. Пасиба.
Сразу выскакивает другой ворос - как определить, какими кнопками переключает юзер раскладку?
Или как сменить раскладку средствами AutoIt?

Sanja Alone 04-02-2006 02:30 400627

Cherepan
Цитата:

Сразу выскакивает другой ворос - как определить, какими кнопками переключает юзер раскладку?
Или как сменить раскладку средствами AutoIt?
Посмотри это и это сообщения.

Cherepan 04-02-2006 12:04 400686

Sanja Alone
Пасибки, работает.
VelDmi
После переключения раскладки еще интересней:
C^\~ ~ig~i~ Fi~Es\~i~i ~iFTWAE\~EEFA~ ~ ~iFE~i~EAL

Send() не хочет нормально работать с латиницей в любой раскладке. С кириллицей проблем нет.

Scratch56 04-02-2006 14:30 400743

Cherepan А случаем не в Виртуальном писюке Send() делаешь? У меня такое в Виртуальном, а в обычном - нормально.

Cherepan 04-02-2006 14:44 400749

Scratch56
Не, в винде XP SP2 RUS

Cherepan 04-02-2006 16:58 400781

Еще одна интересная особенность - этот глюк не во всех окнах. В некторых все прокатывает на ура.


Время: 22:15.

Время: 22:15.
© OSzone.net 2001-