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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Генератор Autoit script (http://forum.oszone.net/showthread.php?t=144404)

zmeeust 07-07-2009 05:59 1160735

Генератор Autoit script
 
Использую autoit для создания тихой установки приложений, Люди, подскажите, есть ли какая-либо программа, для генерации скриптов
К примеру запускаю инсталлятор, отвечаю на вопросы, это всё записывается и генерируется скрипт?

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

proxy 07-07-2009 09:19 1160817

1 AutoItMacroGenerator
2 ScriptWriter

по ходу, они в комплекте идут с этим SciTe .... :sorry:
да и выложить можно ...если надо

tweakos 07-07-2009 11:11 1160892

Цитата:

Цитата proxy
1 AutoItMacroGenerator
2 ScriptWriter »

имхо.все эти генераторы ,я вам скажу,.....лучше да ну их нафиг.
нет ничего лучше скрипта,который сам написал....

proxy 07-07-2009 16:06 1161135

Цитата:

Цитата tweakos
имхо.все эти генераторы ,я вам скажу,.....лучше да ну их нафиг.
нет ничего лучше скрипта,который сам написал.... »

согласен!! ), но вопрос же - в обратном:
Цитата:

Цитата zmeeust
Люди, подскажите, есть ли какая-либо программа, для генерации скриптов
К примеру запускаю инсталлятор, отвечаю на вопросы, это всё записывается и генерируется скрипт? »

как спросил - так и ответил :)

zmeeust 08-07-2009 04:33 1161684

tweakos, Я с тобой согласен
Вчера попробовал, лажа полная самому лучше писать

jentoso 08-07-2009 17:15 1162210

Цитата:

Цитата zmeeust
Вчера попробовал, лажа полная самому лучше писать »

А что, если вручную потом испраить то что сгенерировалось? Или там полная неразберихи. Просто сам еще этот метод не использовал. В основном так же делаю вручную.

proxy 08-07-2009 17:55 1162240

Цитата:

Цитата jentoso
А что, если вручную потом испраить то что сгенерировалось? Или там полная неразберихи. Просто сам еще этот метод не использовал. В основном так же делаю вручную. »

Можно и так - тут главное что бы удоно было.

266903582 09-07-2009 00:06 1162531

Может кому понадобится... Для собственных нужд писал, так что придирки к "культурности кода" не принимаются. Ничего сложного, прога собирает заголовки и (выбираемый пользователем из выводимого в листбоксе набора строк) уникальный текст окна для идентификации, а также идентификаторы контролов, может брать текст из edit боксов, вставлять его (для работы с кейгенами), распознает текст и переменные (если перед словом поставить $), закрывать окна, запускать файлы, кликать по координатам (не дорабатывал эту фичу за ненадобностью). После окончания работы установщика жмем Esc, получаем готовый скрипт автоустановщика, в редких случаях его приходится дорабатывать ручками. Нужного окна дождется автоматом, нажмет где надо... мне такого функционала хватает, а там смотрите сами.
Код:

#include <Misc.au3>
#include <GUIConstants.au3>
Opt("TrayIconDebug",1)
;Opt("MouseCoordMode",0)
HotKeySet("{ESC}","texit")
$dll = DllOpen("user32.dll")
$file = FileOpen("file.au3", 2)
$written_to_file_text=""
$progstatus=0
$filepath=""
$write_on_exit_text=""
$_texttopaste=""
$haos=0
$FilenameOnExitChange=""
$input_variable_got=""
$current_mpos=0
$as_is=0
;fop()
;wr(";run('')")
TrayTip("","ctrl - начало записи"&@lf&"pause - пауза/возобновление записи"&@lf&"shift - диалог открытия файла"&@lf&"esc - завершение записи",1)
while not _IsPressed("11", $dll)
        sleep(10)
WEnd
TrayTip("","ЗАПИСЫВАЕМ",1)
;---------------------------------------------------------------------------------------------------------------------
While 1
        if _IsPressed("01", $dll) Then                                                        ;01-lmb 02-rmb        ctrltext & classn  11-ctrl 10-shift
                $current_mpos=MouseGetPos()
                $wtt=WinGetTitle("")
                $wgt=WinGetText("")
                $cgf=ControlGetFocus("")
                sleep(200)
                $wgt=repl($wgt)            ;выбор уникального текста с параметрами пользователем
                Select
                case $progstatus=0 ;кликнуть
                        if $cgf<>"" then wr("cl('"&$wtt&"','"&$wgt&"','"&$cgf&"')")
                case $progstatus=2 ;ждать
                                wr("wa('"&$wtt&"','"&$wgt&"')")
                case $progstatus=3 ;взять
                        if $cgf<>"" then wr("wa('"&$wtt&"','"&$wgt&"')"&@lf&$input_variable_got&"=ControlGetText('"&$wtt&"','"&$wgt&"','"&$cgf&"')")
                case $progstatus=4 ;вставить
                        if $cgf<>"" And StringLeft($_texttopaste,1)= "$" then wr("wa('"&$wtt&"','"&$wgt&"')"&@lf&"ControlSetText('"&$wtt&"','"&$wgt&"','"&$cgf&"',"&$_texttopaste&")"&";ВСТАВИТЬ ТЕКСТ СЮДА")
                        if $cgf<>"" And StringLeft($_texttopaste,1)<>"$" then wr("wa('"&$wtt&"','"&$wgt&"')"&@lf&"ControlSetText('"&$wtt&"','"&$wgt&"','"&$cgf&"','"&$_texttopaste&"')"&";ВСТАВИТЬ ТЕКСТ СЮДА")
                case $progstatus=10 ;окно возможно
                        if $cgf<>"" then $write_on_exit_text&=@tab&@tab&"if WinExists('"&$wtt&"','"&$wgt&"') then ControlClick('"&$wtt&"','"&$wgt&"','"&$cgf&"')"&@lf
                case $progstatus=12 ;закрыть окно
                        wr("wa('"&$wtt&"','"&$wgt&"')"&@lf&"WinClose('"&$wtt&"','"&$wgt&"')")
                        WinClose($wtt,$wgt)
                case $progstatus=15;Отмена блока
                        Sleep(1);ExitLoop
                case $progstatus=20;Кликаем по координатам мыши  (при возможном появлении окна не сработает. отладить в будущем совместную работу опций)
                                wr("wa('"&$wtt&"','"&$wgt&"')"&@lf&"MouseClick('left',"&$current_mpos[0]&","&$current_mpos[1]&",1,0)")
                EndSelect
                ;TrayTip($wtt,$cgf,1)
                $progstatus=0
                $as_is=0
        EndIf
        if _IsPressed("10",$dll) Then fop()
        if _IsPressed("13",$dll) Then pause()
        if _IsPressed("1b", $dll) Then texit();ExitLoop                ;esc
        sleep(10)
WEnd
;---------------------------------------------------------------------------------------------------------------------
func texit()        ;завершение
        wr("Func wa($tx1, $tx2)")
        wr("        While Not WinExists($tx1, $tx2)")
        wr($write_on_exit_text&"                ;if WinExists("","") then WinClose("","")")
        wr("                Sleep(1) ")
        wr("        WEnd ")
        wr("        ;WinActivate($tx1, $tx2)")
        wr("EndFunc")
        wr("Func cl($tx1, $tx2,$classn)")
        wr("        wa($tx1, $tx2)")
        wr("        ControlClick($tx1, $tx2,$classn)")
        wr("EndFunc")
        DllClose($dll)
        FileClose($file)
        if $FilenameOnExitChange<>"" Then
                if MsgBox(4,"","Переименовать файл скрипта?")=6 Then
                        $FilenameOnExitChange=StringTrimRight($FilenameOnExitChange,4)
                        FileMove("file.au3",$FilenameOnExitChange&"_au3.au3",1)
                EndIf
                if MsgBox(4,"","Компилировать скрипт?")=6 Then
                        TrayTip("","Compiling in process",1)
                        RunWait(@ProgramFilesDir&'\AutoIt3\Aut2Exe\Aut2exe.exe /in '&@ScriptDir&'\'&$FilenameOnExitChange&'_au3.au3')
                EndIf
        EndIf
        exit
EndFunc
Func fop()
        $filepath=FileOpenDialog("",@WorkingDir,"Программы (*.exe)")
        if  Not @error And StringLeft($filepath,9)<>"c:\Progra" then
                $filepath=fred($filepath)
                wr("run('"&$filepath&"')")
                run($filepath)
        Else
                wr("run('"&$filepath&"')")
                run($filepath)
        EndIf
        if $FilenameOnExitChange="" Then $FilenameOnExitChange=$filepath
        $filepath=""
EndFunc
Func fred($ppp)
        $ppp_=""
        while StringRight($ppp,1)<>"\"
                $ppp_=StringRight($ppp,1)&$ppp_
                $ppp=StringTrimRight($ppp,1)
        WEnd
        Return $ppp_
EndFunc
Func pause()
        TrayTip("","ПАУЗА",1)
        sleep(300)
        while 1
                if _IsPressed("13",$dll) OR $filepath<>"" Then ExitLoop
                sleep(10)
        WEnd
        TrayTip("","ЗАПИСЫВАЕМ",1)
        sleep(300)
EndFunc
Func wr($text_to_write)
        if $written_to_file_text<>$text_to_write then
                FileWrite($file,$text_to_write&@LF)
                $written_to_file_text=$text_to_write
        EndIf
EndFunc
Func wa($tx1, $tx2)
        While Not WinExists($tx1, $tx2)
                Sleep(1)
        WEnd
EndFunc
Func cl($tx1, $tx2,$classn)
        wa($tx1, $tx2)
        ControlClick($tx1, $tx2,$classn)
EndFunc
;------------------------------------------------------------------------------------------------------GUI start
func repl($whole_window_text)
        $tempstr=$whole_window_text
        $tempstr=StringReplace($tempstr,@crlf,"|")
        $tempstr=StringReplace($tempstr,@cr,"|")
        $tempstr=StringReplace($tempstr,@lf,"|")
        GUICreate("Выбери параметры и уникальный текст окна",310,350,-1,-1,-1,$WS_EX_TOPMOST)
        $ctrl=GUICtrlCreateLabel($cgf,0,5)
        $butt_cancel_block=GUICtrlCreateButton("Отмена блока",220,0,90)
        $butt_cancel_radio=GUICtrlCreateButton("Очистка опций",220,25,90)
        $radio_wa=GUICtrlCreateRadio("Просто ждать появления этого окна",0,25)
        $radio_get=GUICtrlCreateRadio("Читать отсюда текст",0,50)
        $input_variable_gui_get=GUICtrlCreateInput("",150,50)
        $radio_set=GUICtrlCreateRadio("Вставить сюда текст",0,75)
        $texttopaste=GUICtrlCreateInput("",150,75)
        $radio_possible=GUICtrlCreateRadio("Появление окна возможно, но необязательно",0,100)
        $radio_close=GUICtrlCreateRadio("Закрыть окно",0,125)
        $checkb_haos=GUICtrlCreateCheckbox("Произвольный порядок",120,125)
        $checkb_mpos=GUICtrlCreateCheckbox("Mpos",263,125)
        $butt_ok=GUICtrlCreateButton("Как есть",165,0)
        $listb=GUICtrlCreateList("",0,150,300,300,$LBS_USETABSTOPS)
        GUICtrlSetState($texttopaste,$GUI_HIDE)
        GUICtrlSetState($input_variable_gui_get,$GUI_HIDE)
  GUISetState(@SW_SHOW)
        GUICtrlSetData($listb,$tempstr)
        if $haos=1  then GUICtrlSetState ($checkb_haos,$GUI_CHECKED)
        if $haos<>1 then GUICtrlSetState ($checkb_haos,$GUI_UNCHECKED)
        $msg=0
        While $msg <> $GUI_EVENT_CLOSE
                $msg = GUIGetMsg()
                Select
                case $msg=$listb
                        ;MsgBox(0,"",GUICtrlRead($listb))
                        $whole_window_text=GUICtrlRead($listb)
                        ExitLoop
                case $msg=$butt_cancel_block
                        $progstatus=15
                        ExitLoop
                case $msg=$butt_cancel_radio
                        GUICtrlSetState ($radio_wa,$GUI_UNCHECKED)
                        GUICtrlSetState ($radio_get,$GUI_UNCHECKED)
                        GUICtrlSetState ($radio_set,$GUI_UNCHECKED)
                        GUICtrlSetState ($radio_possible,$GUI_UNCHECKED)
                        GUICtrlSetState ($radio_close,$GUI_UNCHECKED)               
                        GUICtrlSetState ($checkb_haos,$GUI_UNCHECKED)
                        GUICtrlSetState ($checkb_mpos,$GUI_UNCHECKED)
                case $msg=$radio_set
                        GUICtrlSetState($texttopaste,$GUI_SHOW)
                case $msg=$radio_get
                        GUICtrlSetState($input_variable_gui_get,$GUI_SHOW)
                case $msg=$butt_ok
                        $as_is=1
                        ExitLoop
                EndSelect
        WEnd
        if $progstatus<>15 Then
                if GUICtrlRead($radio_wa)=1 then $progstatus=2
                if GUICtrlRead($radio_get)=1 then $progstatus=3
                if GUICtrlRead($radio_get)=1 then $input_variable_got=GUICtrlRead($input_variable_gui_get)
                if GUICtrlRead($radio_set)=1 then $progstatus=4
                if GUICtrlRead($radio_set)=1 then $_texttopaste=GUICtrlRead($texttopaste)
                if GUICtrlRead($radio_possible)=1 then $progstatus=10       
                if GUICtrlRead($radio_close)=1 then $progstatus=12
                if GUICtrlRead($checkb_haos)=1 then $haos=1
                if GUICtrlRead($checkb_haos)<>1 then $haos=0
                if GUICtrlRead($checkb_mpos)=1 then $progstatus=20
                if $haos=1 Then $progstatus=10
        EndIf
        GUIDelete()
        $tempstr=""
        While StringLeft($whole_window_text,1)<>"" And StringLeft($whole_window_text,1)<>"'" And StringLeft($whole_window_text,1)<>'"'  ;чистим уникальный текст от недопустимых символов
                $tempstr&=StringLeft($whole_window_text,1)
                $whole_window_text=StringTrimLeft($whole_window_text,1)
        WEnd
        $whole_window_text=$tempstr
        if $as_is=1 Then $whole_window_text=""
        return $whole_window_text
EndFunc
;----------------------------------------------------------------------------------------------------------------------GUI end

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

zmeeust 09-07-2009 04:52 1162619

jentoso, После генерации кода будет больше возни, лучше самому писать код,
чё непонятно смотреть в справке или спросить на форуме

266903582 09-07-2009 18:35 1163177

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

zmeeust 13-07-2009 05:23 1165990

266903582, Дерзай, буду рад посмотреть на результат

tweakos 13-07-2009 06:08 1165995

Цитата:

Цитата 266903582
Я, например, слишком ленивый человек, чтобы каждый раз делать все "ручками", проще написать программу, которая сделает всю нудятину за меня... »

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

zmeeust 16-07-2009 07:39 1169013

tweakos,
Полностью с тобой согласен

266903582 16-07-2009 19:08 1169703

zmeeust, http://forum.oszone.net/post-1162531-8.html
Дерзанул, давно пользуюсь, меня полностью устраивает...
tweakos, от рутинных телодвижений нового не познать, а если задача не решается автоматизатором (а я не мало условий предусмотрел), тогда уж ручками работаем и "базу знаний" расширяем.
Цитата:

Цитата zmeeust
tweakos,
Полностью с тобой согласен »

Странно слышать такое от автора темы " Генератор Autoit script ", но это уж дело автора, я свое конструктивное решение предложил, использовать его не заставляю...

tweakos 17-07-2009 05:09 1170106

266903582,
Цитата:

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

Если человеку нужен генератор,это наталкивает на мысль что он вообще не знает автоита,так как не может выполнить задачу без генератора.Зачем тогда ему вообще автоит нужен?
ИМХО Не надо делать из автоита "тупую кликалку",он может решать задачи гораздо сложнее,чем просто нажатие кнопки..

proxy 17-07-2009 05:13 1170108

Цитата:

Цитата tweakos
ИМХО Не надо делать из автоита "тупую кликалку",он может решать задачи гораздо сложнее,чем просто нажатие кнопки.. »

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

tweakos 17-07-2009 05:31 1170113

Цитата:

Цитата proxy
AutoIt это уже вполне мноооооого умеющий язык, "тупой кликалки" уже не получится »

Именно это я и имел в виду.ИМХО генераторы скриптов как раз таки превращают автоит в "тупую кликалку"...

proxy 17-07-2009 06:30 1170122

Цитата:

Цитата tweakos
Именно это я и имел в виду.ИМХО генераторы скриптов как раз таки превращают автоит в "тупую кликалку"... »

по мойму, это утверждение, как и беседы на эту тему - абсолютно пусты. можно взглянуть на заааааааафигенное колличество разрабатываемых утилиток и UDF-ок на офф форуме - думаю, это показывает, что уровень языка высокий и позволяет реализовать как и кликалки, так и более.
имхо, кликакли - очень ползные. пример, работа в офисе - поступило задание "недельную работу выполнить за два часа" - вот тут как раз кликолки и спасают мир ;) имхо, нужно все! и мега навороченные варианты и "тупые жмаколки", "безмозговые тыкалки" и "бездумные нажималки"!

266903582 17-07-2009 21:27 1170916

Цитата:

Цитата tweakos
ИМХО генераторы скриптов как раз таки превращают автоит в "тупую кликалку"... »

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

А на закуску приведу вам цитату из справочника:
"AutoIt v3 - это язык для написания сценариев, напоминающий BASIC и предназначенный для автоматизации Windows GUI (графического интерфейса пользователя MS Windows). Его возможности - это методы симуляций нажатий комбинаций клавиш клавиатуры и мыши, функции управления окнами и его визуальными элементами. Решение, явно предлагаемое средствами AutoIt v3, его сценарием, обычно невозможно достичь коротким и понятным кодом какого-либо языка. "

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

tweakos 18-07-2009 05:32 1171129

Цитата:

Цитата 266903582
зык программирования - средство решения задач, поставленных перед программистом. »

Согласен
Цитата:

Цитата 266903582
А написали его люди, стремящиеся программировать более эффективно, т.е. решать задачи, производя меньшее кол-во телодвижений. »

согласен
Цитата:

Цитата 266903582
процесс внедрения "тупых кликалок" называют еще "автоматизацией трудового процесса". »

Для автоматизации действий есть более понятный для юзера софт,тогда как автоит все же среда разработки.
Цитата:

Цитата 266903582
А все остальное - доп. возможности, ни коим образом не преуменьшающие полезность основной специализации языка. Так что превращать автоит ни во что не нужно, его таким уже сделали, а потом лишь расширили функционал... »

Расширили до среды программирования-и это важно.



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

proxy 18-07-2009 05:44 1171130

Цитата:

Цитата tweakos
Для автоматизации действий есть более понятный для юзера софт,тогда как автоит все же среда разработки. »

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

Цитата:

Цитата tweakos
Расширили до среды программирования-и это важно. »

...? В даннмо случае средой программирования можно назвать SciTe - т.к. включает в себя редактор, средства автоматизации сборки, интерпитатор/компилятор.
AutoIt же - это скриптовый язык программирования.

tweakos 18-07-2009 06:47 1171142

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

266903582 18-07-2009 06:52 1171145

Цитата:

Цитата tweakos
Для автоматизации действий есть более понятный для юзера софт,тогда как автоит все же среда разработки. »

Так почему бы автоиту не стать той самой средой разработки "понятного для юзера софта"? Не вижу препятствий...
Цитата:

Цитата tweakos
Расширили до среды программирования-и это важно. »

Да, важно, ведь язык задумывался как простой скриптовик, которому нужно говорить куда и чем кликнуть, а на данный момент я могу на этом языке написать программу, которая сама напишет нужный в данном контексте скрипт, кликающий куда нужно, и сделает она это максимально быстро и без мелких ошибок (т.к. исключается человеческий фактор в множественных операциях копированиия/вставки инфы из Au3Info Tool-a в код скрипта).
Цитата:

Цитата tweakos
Дальнейшее обсуждение,и глупые споры ни к чему не приведут... »

А я надеюсь что приведут, и автор темы все-таки сделает определенные выводы.
Цитата:

Цитата tweakos
но мое личное мнение -писать самому(во избежание ошибок) а если лень - пользуйтесь готовыми решениями... »

А кто мешает использовать части кода готовых решений или учиться на таких решениях, как на примерах? Зачем писать программу с нуля, если есть готовый вариант, дорабатываем для своих нужд и пользуемся... Явная экономия времени, да и эта ветка форума специально для таких целей запущена.
Цитата:

Цитата tweakos
ИМХО инсталяцию программ можно сделать и без мелькания окон,самошевелющейся мыши на экране.... »

Я, например, занимаюсь открытием точек оказания компьютерных услуг в торговых центрах. На каждый компьютер нужно установить несколько десятков программ (Никакой AD нет). Ставить каждый раз вручную - не вариант, писать скрипт-автоматизатор установки для каждой программы ручками - тоже не подходит, так что берем генератор скриптов, сопровождаем им установку программы, получаем быстрый результат... Обновление софта и пополнение пакета программ больше не являются головной болью. На написание генератора я потратил меньше времени, чем ушло бы на ручную работу...

tweakos 18-07-2009 07:13 1171151

266903582, ...... убедил....:):):)

proxy 18-07-2009 08:20 1171172

вывод: все хорошо в меру - в нужном месте и в нужное время - где то руками, а где то и авто )


Время: 17:49.

Время: 17:49.
© OSzone.net 2001-