[Архив - Часть 1.2] AutoIt скрипты

Ответить
 • Просмотры: 13
Аватара пользователя
Creat0R

Re: [Архив - Часть 1.2] AutoIt скрипты

Сообщение Creat0R »

Sanja Alone




Цитата:



можно не париться с доп. текстом.



Спасибо, действительно так проще.



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





P.S:

Странно, но вот например, если выделить такой текст:



"Текст



То кавычка становится после слова (в файле):



Текст"
Аватара пользователя
Sanja Alone

Re: [Архив - Часть 1.2] AutoIt скрипты

Сообщение Sanja Alone »

Интереснейшая фигня наблюдается. Имеем скрипт, который пингует некий хост, и выходит с кодом либо 1, либо 0



Код:

Код: Выделить всё

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 - мой адсл-модем, и он пингуется всегда 8-)

Однако, удалим конструкцию с 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 скрипты

Сообщение Creat0R »

Sanja Alone




Цитата:



Можешь еще попробовать побороться с буфером обмена



Как не странно, но к такому (подбному) решению я пришёл до затеи использовать параметры командной строки, для записи текста в файл - в скрипте я писал так:





Код:

Код: Выделить всё

$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 скрипты

Сообщение sattva »

Помогите разобраться почему не работает выбор строки из выпадающего меню для Adobe Creative Suite 2 Russian by cvs/SSG





Код:

Код: Выделить всё

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 скрипты

Сообщение Sanja Alone »

Creat0R



А)



Код:

Код: Выделить всё

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 скрипты

Сообщение prokazzza »

Sanja Alone



я не силен в скриптах пожалуста можно сделать вот скрипт



запуск c:/install/install.sfx.exe

нажать кнопку "извлечь"

вставить пароль из c:/install/password.txt

нажать кнопку "ок"

пождать пока распакуется RAR архив

подождать пока установится istall.exe

если выйдет надпись "сделать перезагрузку" нажать нет, если не выйдет надпись то ничего не делать.
Аватара пользователя
sattva

Re: [Архив - Часть 1.2] AutoIt скрипты

Сообщение sattva »

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 скрипты

Сообщение amel27 »

prokazzza


Цитата:



вот картинка перезагрузки (1 рисунок)



Пик! пик! пииииик! Ты мне можешь объяснить какое отношение имеет "картинка перезагрузки" Office 2003 к скрипту установки Atnotes?




Цитата:



доработать вот этот скрипт



См. тему
Соединение по dial-up автоматом
и в
старой теме
по AutoIt bogomolv приводил вариант реализации подобного (ПОЛЬЗУЙСЯ ПОИСКОМ по форуму). Если тебе после всего прочитанного все-таки захочется доработать именно этот скрипт, то воспользовавшись AutoIt Window Info ты самостоятельно сможешь осуществить сие действо.
Аватара пользователя
amel27

Re: [Архив - Часть 1.2] AutoIt скрипты

Сообщение amel27 »

Возвращаясь к задаче поиска вхождений заданного слова в произвольный текст. Выше я дал маху утверждая, что AutoIT не поддерживает регулярные выражения... хотя с русским опять облом - если метасимволы \l \u \w еще работают, то (?i) ни в какую... Изображение



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 скрипты

Сообщение Creat0R »

prokazzza


Цитата:



это просто пример



Практически у любого приложения есть ключи/параметры файла ответов и т.п. прибамбасы для отмены перезагрузки. Тема по Офису на форуме -
Автоматическая установка Office 2003
, статьи по Офису читай на сайте + все-таки прочти статью о типах инсталляторов (ссылку я тебе уже давал). Если все же возникнут непреодолимые с пом. ключей/параметров окна, то еще прочти маленькую заметку на тему "отлова случайных окон" в моем
FAQ по AutoIt
.




Цитата:



еслиб я умел



Если ты не представляешь что делать с AutoIt Window Info (%ProgramFiles%\AutoIt3\AU3Info.exe) в частности и/или с AutoIt-ом в целом, тогда скачай редактор
SciTE
. Помимо собственно редактора, ты также получишь ScriptWriter (%ProgramFiles%\AutoIt3\SciTE\ScriptWriter\scriptwriter.exe). Думаю, что помочь в написани скрипта он тебе сможет. Это, грубо говоря, прога записи твоих действий в готовый AutoIt-код. Правда, потом нужно будет вручную подправлять такой "самописный" скрипт, но это лучше, чем ничего.




Цитата:



я тя наверно не просил



Наглость - второе счастье. Я тебе искренне завидую, ибо не имею даже первого... Я не могу за всех все делать. Я могу лишь посильно помочь в чем-то. Я тебе дал всю необходимую инфу - изучай. Бери пример с Creat0R-а. Еще пару месяцев назад он не знал базовых принципов, а сейчас замахивается "на Вильяма нашего, Шекспира".
Ответить

Вернуться в «AutoIt»