[Архив - Часть 1.2] AutoIt скрипты
-
Creat0R
Re: [Архив - Часть 1.2] AutoIt скрипты
Sanja Alone
Цитата:
можно не париться с доп. текстом.
Спасибо, действительно так проще.
Но у меня появилась немного другая проблема (на эту-же тему) - Дело в том, что если выделенный текст содержал кавычки (более чем две пары), то кавычки не попадают в файл. И ещё, если выделенный текст содержит кавычку, а затем пробел (в дальнейшем тексте, и именно в дальнейшем, не в предыдущем), то выдаётся сообщение с ошибкой выполнения сценария - Что мол переменная используется без того чтобы она была объявленна. А когда объявляю переменные, скрипт не выводит ошибок, но при таком случае (кавычка а затем пробел -> "текст ) вообще ничего не пишет в файл (кроме ссылки естественно). - Это лечится?
P.S:
Странно, но вот например, если выделить такой текст:
"Текст
То кавычка становится после слова (в файле):
Текст"
Цитата:
можно не париться с доп. текстом.
Спасибо, действительно так проще.
Но у меня появилась немного другая проблема (на эту-же тему) - Дело в том, что если выделенный текст содержал кавычки (более чем две пары), то кавычки не попадают в файл. И ещё, если выделенный текст содержит кавычку, а затем пробел (в дальнейшем тексте, и именно в дальнейшем, не в предыдущем), то выдаётся сообщение с ошибкой выполнения сценария - Что мол переменная используется без того чтобы она была объявленна. А когда объявляю переменные, скрипт не выводит ошибок, но при таком случае (кавычка а затем пробел -> "текст ) вообще ничего не пишет в файл (кроме ссылки естественно). - Это лечится?
P.S:
Странно, но вот например, если выделить такой текст:
"Текст
То кавычка становится после слова (в файле):
Текст"
-
Sanja Alone
Re: [Архив - Часть 1.2] AutoIt скрипты
Интереснейшая фигня наблюдается. Имеем скрипт, который пингует некий хост, и выходит с кодом либо 1, либо 0
Код:
Он вызывается из следующего батника:
Код:
Так вот, здесь результат БУДЕТ ОДИНАКОВЫЙ для обоих пингов, и зависит только от того, пингуется ли %HOST1%!
Цитата:
ping google.com returns 0
ping 192.168.100.12312 returns 0
Цитата:
ping google.23rwefwe returns 1
ping 192.168.100.1 returns 1
А 192.168.100.1 - мой адсл-модем, и он пингуется всегда
Однако, удалим конструкцию с IF, и всё работает как надо:
Код:
Цитата:
ping goowefwegle.com returns 1
ping 192.168.100.1 returns 0
Где грабли - в AutoIt или командном интерпретаторе винды?
Проверено на XP SP1, AutoIt 3.2.0.1
Код:
Код: Выделить всё
If Ping($cmdline[1],2000) > 0 Then
Exit(0) ; if PING success, returns 0
Else
Exit(1)
EndIfОн вызывается из следующего батника:
Код:
Код: Выделить всё
@echo off
SET PING= ping.au3
SET HOST1=google.com
SET DG=192.168.100.12312
%ping% %HOST1%
echo ping %HOST1% returns %errorlevel%
if "%DG%"=="" (
rem
) ELSE (
%ping% %DG%
echo ping %DG% returns %errorlevel%
)Так вот, здесь результат БУДЕТ ОДИНАКОВЫЙ для обоих пингов, и зависит только от того, пингуется ли %HOST1%!
Цитата:
ping google.com returns 0
ping 192.168.100.12312 returns 0
Цитата:
ping google.23rwefwe returns 1
ping 192.168.100.1 returns 1
А 192.168.100.1 - мой адсл-модем, и он пингуется всегда
Однако, удалим конструкцию с IF, и всё работает как надо:
Код:
Код: Выделить всё
@echo off
SET PING= ping.au3
SET HOST1=goowefwegle.com
SET DG=192.168.100.1
%ping% %HOST1%
echo ping %HOST1% returns %errorlevel%
%ping% %DG%
echo ping %DG% returns %errorlevel%Цитата:
ping goowefwegle.com returns 1
ping 192.168.100.1 returns 0
Где грабли - в AutoIt или командном интерпретаторе винды?
Проверено на XP SP1, AutoIt 3.2.0.1
-
Creat0R
Re: [Архив - Часть 1.2] AutoIt скрипты
Sanja Alone
Цитата:
Можешь еще попробовать побороться с буфером обмена
Как не странно, но к такому (подбному) решению я пришёл до затеи использовать параметры командной строки, для записи текста в файл - в скрипте я писал так:
Код:
А команду в браузере писал так:
Код:
Таким образом, до вызова самого скрипта, выделенный текст в документе, помещается в буффер обмена, и скрипт “берёт” из буффера полный текст в переменную, и вписывает в файл. Это решение в принципе не имеет проблем, но причина по которой я хотел узнать как передавать два значения (ключа) скрипту, являлась обходом помещения текста в буффер обмена, т.е чтобы не занимать лишни раз буффер обмена.
Ещё раз спасибо за помощь!
-------------------------------------
У меня тут появилась проблема с другой сферы...
Я сделал немного примитивный (пробный) гуи интерфейс (см. код ниже), и есть пару вопросов по этому поводу:
А) Как можно сделать, чтобы после зажатия галки у надписи “Опция”, окно (MsgBox) появлялось только после зажатия, а не каждый раз. Т.е в данный момент, если я зажму галку, то сообщение появляется, если отожму, то тоже появляется - как сделать чтобы появлялось только после зажатия?
Б) У меня в гуи (GUI), есть две кнопки (кроме прочих) - Одна для отмечивания всех галок ("Выбрать все"), а другая для их снятия ("Очистить все") - Вопрос: Как сделать чтобы была такая одна кнопка, а ещё лучше тоже чекбокс, после нажатия которого\ой, выделялись бы все чекбоксы, а если отжать эту\от кнопку\чекбокс, то чтобы также и отжимались все остальные чекбоксы?
Г) Это самая большая прблема, и она у меня имеет наивысшый приоритет для решения - Я поместил в гуи прогресс бар (progressbar), и хотел бы добиться такого результата, чтобы в то время, как происходит копирование определённых файлов, этот прогресс бар был задйствован. Т.е если я копирую например большой файл (фильм к примеру), то чтобы пока он копировался, ползунок бегал в прогрес баре. Мне в принципе не нужно чтобы происходил там какого то рода подсчёт размера файла (хотя думаю в этом и заключается достижение моей задачки), и на основе чего и делался прогресс, а чтобы просто было видно что копирование в прогрессе (и не важно в каком этапе оно находится
).
Я временно ограничелся запуском внешнего прогресс бара (через запуск этого же скрипта, с ком. строкой), который (прогрессбар) ходит туда сюда до тех пор, пока не будет существовать определёный файл, который создаётся самим скриптом в тот момент, как копирование окончено (т.е я поставил команду создания этого файла как метку, после команды копирования). Но хотелось бы чтобы этот прогресс бар был внутри гуи интерфейса.
Скрипт:
Код:
Цитата:
Можешь еще попробовать побороться с буфером обмена
Как не странно, но к такому (подбному) решению я пришёл до затеи использовать параметры командной строки, для записи текста в файл - в скрипте я писал так:
Код:
Код: Выделить всё
$Text = ClipGet()
If $CmdLine[0] 0 Then
$Url = $CmdLine[1]
FileWrite(@ScriptDir & "\File.txt", "Скопированный текст: " & $Text & @CRLF & "Текст скопирован с документа: " & $Url)
EndIfА команду в браузере писал так:
Код:
Код: Выделить всё
Copy & Execute program, "Script.exe", "%u"Таким образом, до вызова самого скрипта, выделенный текст в документе, помещается в буффер обмена, и скрипт “берёт” из буффера полный текст в переменную, и вписывает в файл. Это решение в принципе не имеет проблем, но причина по которой я хотел узнать как передавать два значения (ключа) скрипту, являлась обходом помещения текста в буффер обмена, т.е чтобы не занимать лишни раз буффер обмена.
Ещё раз спасибо за помощь!
-------------------------------------
У меня тут появилась проблема с другой сферы...
Я сделал немного примитивный (пробный) гуи интерфейс (см. код ниже), и есть пару вопросов по этому поводу:
А) Как можно сделать, чтобы после зажатия галки у надписи “Опция”, окно (MsgBox) появлялось только после зажатия, а не каждый раз. Т.е в данный момент, если я зажму галку, то сообщение появляется, если отожму, то тоже появляется - как сделать чтобы появлялось только после зажатия?
Б) У меня в гуи (GUI), есть две кнопки (кроме прочих) - Одна для отмечивания всех галок ("Выбрать все"), а другая для их снятия ("Очистить все") - Вопрос: Как сделать чтобы была такая одна кнопка, а ещё лучше тоже чекбокс, после нажатия которого\ой, выделялись бы все чекбоксы, а если отжать эту\от кнопку\чекбокс, то чтобы также и отжимались все остальные чекбоксы?
Г) Это самая большая прблема, и она у меня имеет наивысшый приоритет для решения - Я поместил в гуи прогресс бар (progressbar), и хотел бы добиться такого результата, чтобы в то время, как происходит копирование определённых файлов, этот прогресс бар был задйствован. Т.е если я копирую например большой файл (фильм к примеру), то чтобы пока он копировался, ползунок бегал в прогрес баре. Мне в принципе не нужно чтобы происходил там какого то рода подсчёт размера файла (хотя думаю в этом и заключается достижение моей задачки), и на основе чего и делался прогресс, а чтобы просто было видно что копирование в прогрессе (и не важно в каком этапе оно находится
).Я временно ограничелся запуском внешнего прогресс бара (через запуск этого же скрипта, с ком. строкой), который (прогрессбар) ходит туда сюда до тех пор, пока не будет существовать определёный файл, который создаётся самим скриптом в тот момент, как копирование окончено (т.е я поставил команду создания этого файла как метку, после команды копирования). Но хотелось бы чтобы этот прогресс бар был внутри гуи интерфейса.
Скрипт:
Код:
Код: Выделить всё
#include
$Form1 = GUICreate("Test", 450, 370, 214, 126)
$Opt = GUICtrlCreateCheckbox("Опция", 230, 50, 300, 20)
$File = GUICtrlCreateCheckbox("Файл", 70, 50, 97, 17)
$Edit = GUICtrlCreateCheckbox("Правка", 70, 70, 97, 17)
$View = GUICtrlCreateCheckbox("Вид", 70, 95, 97, 17)
$Bookmarks = GUICtrlCreateCheckbox("Закладки", 70, 120, 97, 17)
$Session = GUICtrlCreateCheckbox("Сеансы", 70, 145, 97, 17)
$progressbar1 = GUICtrlCreateProgress (10,10,200,20)
GUICtrlSetColor(-1,32250)
$All1 = GUICtrlCreateButton("Выбрать все", 70, 330, 90, 23)
$All2 = GUICtrlCreateButton("Очистить все", 70, 300, 90, 23)
$Start = GUICtrlCreateButton("Выполнить", 260, 330, 93, 25)
$Close = GUICtrlCreateButton("Выход", 360, 330, 70, 25)
Dim $radioval1
$group_1 = GUICtrlCreateGroup ("Группа", 255, 190, 140, 110, 100)
GUIStartGroup()
$radio_1 = GUICtrlCreateRadio ("Вариант 1", 285, 220, 90, 20)
GUICtrlSetState ($radio_1,$GUI_CHECKED)
$radio_2 = GUICtrlCreateRadio ("Вариант 2", 285, 270, 90, 20)
GUISetState(@SW_SHOW)
GUISetState ()
While 1
; Здесь по идее, хотелось бы чтобы прогресс бар начал крутится, а остановится пусть в конце скрипта (перед wend)
$msg = GuiGetMsg()
If $msg = $Opt Then MsgBox(48, "Atantion", "This is a test")
If $msg = $All1 Then
GUICtrlSetState ($File,$GUI_CHECKED)
GUICtrlSetState ($Edit,$GUI_CHECKED)
GUICtrlSetState ($View,$GUI_CHECKED)
GUICtrlSetState ($Bookmarks,$GUI_CHECKED)
GUICtrlSetState ($Session,$GUI_CHECKED)
EndIf
If $msg = $All2 Then
GUICtrlSetState ($File,$GUI_UNCHECKED)
GUICtrlSetState ($Edit,$GUI_UNCHECKED)
GUICtrlSetState ($View,$GUI_UNCHECKED)
GUICtrlSetState ($Bookmarks,$GUI_UNCHECKED)
GUICtrlSetState ($Session,$GUI_UNCHECKED)
EndIf
If $msg = $GUI_EVENT_CLOSE Or $msg = $Close Then Exit
Select
Case $msg >= $radio_1 AND $msg -
sattva
Re: [Архив - Часть 1.2] AutoIt скрипты
Помогите разобраться почему не работает выбор строки из выпадающего меню для Adobe Creative Suite 2 Russian by cvs/SSG
Код:
выбор строки "Photoshop CS2 9.0" не происходит
Код:
Код: Выделить всё
ControlCommand('Adobe Creative Suite 2 Russian by cvs/SSG','Activation','obj_COMBOBOX1','SelectString','Photoshop CS2 9.0')выбор строки "Photoshop CS2 9.0" не происходит
-
Sanja Alone
Re: [Архив - Часть 1.2] AutoIt скрипты
Creat0R
А)
Код:
Б) См. пример выше и читай о ф-циях GUICtrlRead ( controlID )[/i], GUICtrlGetState ( [controlID] )
А где ты В) потерял?
Г) Прогрессбар - это весьма муторная штука, когда нет естественных привязок. Твой вариант - это именно тот случай (такая же проблема была и у меня в
Он не мешает работе основного приложения (в данном сл. - архиватора) и дает пользователю представление о происходящем (для верности, можно в процессе/конце операции еще проигрывать звуковой файл и/или выводить сообщения в трее - SoundPlay ( "filename" [, wait] ), TrayTip ( "title", "text", timeout [, option] ) ). Я этого делать не стал, а ты можешь попробовать...
sattva
Цитата:
не работает выбор строки из выпадающего меню
Для начала, дай фокус данному эл-ту управления:
Код:
Если это не поможет, то замени свою строку выбора эл-та комбобокса такой:
Код:
Ну, и самый тежелый случай (если 2 первых не работают):
Код:
, где "число" - это требуемое к-во нажатий на кнопку для выбора нужной строки комбобокса.
А)
Код:
Код: Выделить всё
If $msg = $Opt Then
If GUICtrlRead($Opt)=$GUI_CHECKED Then MsgBox(48, "Atantion", "This is a test")
EndIfБ) См. пример выше и читай о ф-циях GUICtrlRead ( controlID )[/i], GUICtrlGetState ( [controlID] )
А где ты В) потерял?
Г) Прогрессбар - это весьма муторная штука, когда нет естественных привязок. Твой вариант - это именно тот случай (такая же проблема была и у меня в
OEsr
). Я не стал париться, и сделал простой "светофор"
Он не мешает работе основного приложения (в данном сл. - архиватора) и дает пользователю представление о происходящем (для верности, можно в процессе/конце операции еще проигрывать звуковой файл и/или выводить сообщения в трее - SoundPlay ( "filename" [, wait] ), TrayTip ( "title", "text", timeout [, option] ) ). Я этого делать не стал, а ты можешь попробовать...sattva
Цитата:
не работает выбор строки из выпадающего меню
Для начала, дай фокус данному эл-ту управления:
Код:
Код: Выделить всё
ControlFocus('Adobe Creative Suite 2 Russian by cvs/SSG','Activation','obj_COMBOBOX1')Если это не поможет, то замени свою строку выбора эл-та комбобокса такой:
Код:
Код: Выделить всё
ControlCommand('Adobe Creative Suite 2 Russian by cvs/SSG','Activation','obj_COMBOBOX1',"SetCurrentSelection", ControlCommand('Adobe Creative Suite 2 Russian by cvs/SSG','Activation','obj_COMBOBOX1',"FindString",'Photoshop CS2 9.0'))Ну, и самый тежелый случай (если 2 первых не работают):
Код:
Код: Выделить всё
Send("{DOWN число}"), где "число" - это требуемое к-во нажатий на кнопку для выбора нужной строки комбобокса.
-
prokazzza
Re: [Архив - Часть 1.2] AutoIt скрипты
Sanja Alone
я не силен в скриптах пожалуста можно сделать вот скрипт
запуск c:/install/install.sfx.exe
нажать кнопку "извлечь"
вставить пароль из c:/install/password.txt
нажать кнопку "ок"
пождать пока распакуется RAR архив
подождать пока установится istall.exe
если выйдет надпись "сделать перезагрузку" нажать нет, если не выйдет надпись то ничего не делать.
я не силен в скриптах пожалуста можно сделать вот скрипт
запуск c:/install/install.sfx.exe
нажать кнопку "извлечь"
вставить пароль из c:/install/password.txt
нажать кнопку "ок"
пождать пока распакуется RAR архив
подождать пока установится istall.exe
если выйдет надпись "сделать перезагрузку" нажать нет, если не выйдет надпись то ничего не делать.
-
sattva
Re: [Архив - Часть 1.2] AutoIt скрипты
Sanja Alone
Спасибо, сработал только этот вариант
Код:
Спасибо, сработал только этот вариант
Код:
Код: Выделить всё
Global $file='Adobe Photoshop CS2.msi', $key='keygen.exe'
; Запуск кейгена
Run ( $key )
WinWaitActive ( 'Adobe Creative Suite 2 Russian by cvs/SSG' )
ControlFocus('Adobe Creative Suite 2 Russian by cvs/SSG','Activation','obj_COMBOBOX1')
Send ("{DOWN}")-
amel27
Re: [Архив - Часть 1.2] AutoIt скрипты
prokazzza
Цитата:
вот картинка перезагрузки (1 рисунок)
Пик! пик! пииииик! Ты мне можешь объяснить какое отношение имеет "картинка перезагрузки" Office 2003 к скрипту установки Atnotes?
Цитата:
доработать вот этот скрипт
См. тему
Цитата:
вот картинка перезагрузки (1 рисунок)
Пик! пик! пииииик! Ты мне можешь объяснить какое отношение имеет "картинка перезагрузки" Office 2003 к скрипту установки Atnotes?
Цитата:
доработать вот этот скрипт
См. тему
Соединение по dial-up автоматом
и в старой теме
по AutoIt bogomolv приводил вариант реализации подобного (ПОЛЬЗУЙСЯ ПОИСКОМ по форуму). Если тебе после всего прочитанного все-таки захочется доработать именно этот скрипт, то воспользовавшись AutoIt Window Info ты самостоятельно сможешь осуществить сие действо.-
amel27
Re: [Архив - Часть 1.2] AutoIt скрипты
Возвращаясь к задаче поиска вхождений заданного слова в произвольный текст. Выше я дал маху утверждая, что AutoIT не поддерживает регулярные выражения... хотя с русским опять облом - если метасимволы \l \u \w еще работают, то (?i) ни в какую... 
вариант поиска слова с использованием регулярных выражений (на основе скрипта Sanja Alone):
Код:

StringRegExp
- Check if a string fits a given regular expression pattern.StringRegExpReplace
- Replace text in a string based on regular expressions.вариант поиска слова с использованием регулярных выражений (на основе скрипта Sanja Alone):
Код:
Код: Выделить всё
#include
$fileInput = 'file.txt'
$wordToFind= 'исКать'
$find = _FindTextInFile ($fileInput,$wordToFind)
If $find Then
MsgBox (0, 'Поиск слова в файле', 'Слово "' & $wordToFind & '" найдено в ' & $find & '-й строке.')
Else
MsgBox (0, 'Поиск слова в файле', 'Слово "' & $wordToFind & '" в файле не обнаружено.')
EndIf
Func _FindTextInFile ($ifile, $word)
Local $i, $a, $ret=0
_FileReadToArray($ifile, $a)
For $i=1 To Ubound ($a)-1
If StringRegExp ($a [$i], _WordToReg ($word) ) Then
Return $i
EndIf
Next
Return 0
EndFunc
; перевод произвольного слова в регулярное выражение
; требуется для поддержки русских слов, так как (?i)
; воспринимает только регистры английских букв;
; пример: "Кот" --> "\"
Func _WordToReg ($word)
Local $i, $c, $w=""
If StringIsASCII($word) Then
Return '(?i)\'
Else
For $i=1 To StringLen($word)
$c = StringMid ($word, $i, 1)
If StringLower($c) == StringUpper($c) Then
$w=$w & $c
Else
$w=$w & '[' & StringLower($c) & StringUpper($c) & ']'
EndIf
Next
Return '\'
EndIf
EndFunc-
Creat0R
Re: [Архив - Часть 1.2] AutoIt скрипты
prokazzza
Цитата:
это просто пример
Практически у любого приложения есть ключи/параметры файла ответов и т.п. прибамбасы для отмены перезагрузки. Тема по Офису на форуме -
Цитата:
еслиб я умел
Если ты не представляешь что делать с AutoIt Window Info (%ProgramFiles%\AutoIt3\AU3Info.exe) в частности и/или с AutoIt-ом в целом, тогда скачай редактор
Цитата:
я тя наверно не просил
Наглость - второе счастье. Я тебе искренне завидую, ибо не имею даже первого... Я не могу за всех все делать. Я могу лишь посильно помочь в чем-то. Я тебе дал всю необходимую инфу - изучай. Бери пример с Creat0R-а. Еще пару месяцев назад он не знал базовых принципов, а сейчас замахивается "на Вильяма нашего, Шекспира".
Цитата:
это просто пример
Практически у любого приложения есть ключи/параметры файла ответов и т.п. прибамбасы для отмены перезагрузки. Тема по Офису на форуме -
Автоматическая установка Office 2003
, статьи по Офису читай на сайте + все-таки прочти статью о типах инсталляторов (ссылку я тебе уже давал). Если все же возникнут непреодолимые с пом. ключей/параметров окна, то еще прочти маленькую заметку на тему "отлова случайных окон" в моем FAQ по AutoIt
.Цитата:
еслиб я умел
Если ты не представляешь что делать с AutoIt Window Info (%ProgramFiles%\AutoIt3\AU3Info.exe) в частности и/или с AutoIt-ом в целом, тогда скачай редактор
SciTE
. Помимо собственно редактора, ты также получишь ScriptWriter (%ProgramFiles%\AutoIt3\SciTE\ScriptWriter\scriptwriter.exe). Думаю, что помочь в написани скрипта он тебе сможет. Это, грубо говоря, прога записи твоих действий в готовый AutoIt-код. Правда, потом нужно будет вручную подправлять такой "самописный" скрипт, но это лучше, чем ничего.Цитата:
я тя наверно не просил
Наглость - второе счастье. Я тебе искренне завидую, ибо не имею даже первого... Я не могу за всех все делать. Я могу лишь посильно помочь в чем-то. Я тебе дал всю необходимую инфу - изучай. Бери пример с Creat0R-а. Еще пару месяцев назад он не знал базовых принципов, а сейчас замахивается "на Вильяма нашего, Шекспира".