Показать полную графическую версию : [Архив - Часть 1.3] AutoIt скрипты
Sancho111
Error Uknown Function name
Какая у тебя версия AutoIt? и на сколько я помню, должна быть поддержка AutoIt3x...
Установи последнюю версию (http://www.autoitscript.com/autoit3/downloads.php).
Sanja Alone
Можно. Представь себе координатную ось с 21 координатой (10 отрицательных, ноль и 10 положительных)
О, спасибо (как это я пропустил твой пост)...
Сделал функцию для установки скорости произношения речи, но не уверен что это правильно:
Func _SetSpeachSpeed($Speed)
If $Speed < 1 Or $Speed > 21 Then Return SetError(1)
Local $SetRate
Switch $Speed
Case 1 To 11
$SetRate = 4294967280 + ($Speed+5)
If $Speed = 11 Then $SetRate = 0
Case 12 To 21
$SetRate = $Speed-11
EndSwitch
Return RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Speech\Voices", "DefaultTTSRate", "REG_DWORD", $SetRate)
EndFunc
P.S
Что то никак не соображу как использовать Regshot.
Creat0R
Что то никак не соображу как использовать Regshot.
Жмакаешь кнопку 1 снимок, потом делаешь изменения в системе (например ставишь галочку в или двигаешь ползунок), затем жмакаешь 2 снимок, затем сравнить.
Он сравнит состояния реестра до и после и выдаст изменения.
VelDmi
Жмакаешь кнопку 1 снимок, потом делаешь изменения в системе (например ставишь галочку в или двигаешь ползунок), затем жмакаешь 2 снимок, затем сравнить.
Он сравнит состояния реестра до и после и выдаст изменения.
Ну я как бы прочитал Readme, но спасибо всё ровно... просто я не совсем понял как мне это поможет узнать промежуточные значения для скорости произношения речи.
У меня вроде нечем так особо задать скорость, до, и после, а потом проверить... т.е нету способной на это программы, сами персонажи вроде не задают скорость, да и в функциях которые я нашел (с офф. форума) нету ничего подобного.
Sanja Alone
16-03-2007, 15:23
Creat0R
как мне это поможет узнать промежуточные значения для скорости произношения речи
Пуск -> Панель управления -> Речь -> Скорость голоса. Двигаем ползунок и смотрим regshot-ом. Хотя я тебе и так уже все возможные значения выдал интуитивным методом :)
Sanja Alone
Пуск -> Панель управления -> Речь -> Скорость голоса.
Ах вот оно где находится...
Хотя я тебе и так уже все возможные значения выдал интуитивным методом
Да, спасибо, а я видимо подобно интуитивным методом подобрал для этого функцию ;)
P.S
Кстати на её (функции) основе, можно также в своих скриптах строить подобный ползунок :).
Dirk Diggler
19-03-2007, 08:02
написал скрипт, который сперва пишет огромный файл, а потом его же считывает, и проверяет, считалось то же, что записалось или нет?
работает, но медленно, видимо, за счет сравнения строк. Как бы ускорить? что писать в файл, значения абсолютно не имеет.
$filename = "now" & @MIN & @SEC & "temp"
$fil = FileOpen( $filename, 2)
$kb = ""
For $i = 1 to 1024 Step 1
$kb &= "1"
Next
$Mb = ""
For $i = 1 to 1024 Step 1
$Mb &= $kb & @CRLF
Next
#region --- GuiBuilder code Start ---
; Script generated by AutoBuilder 0.6 Prototype
#include <GuiConstants.au3>
GuiCreate("MyGUI", 147, 45,-1, -1 , BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS))
$btStop = GuiCtrlCreateButton("Stop writing!", 10, 10, 130, 30)
GuiSetState()
$volume = 0
Do
$msg = GuiGetMsg()
Select
Case ($msg = $GUI_EVENT_CLOSE) or ($msg = $btStop)
ExitLoop
Case Else
;;;
EndSelect
$err= FileWriteLine( $fil, $Mb)
$volume += 1
Until ($err <> 1)
FileClose($fil)
GUIDelete()
GuiCreate("MyGUI", 147, 45,-1, -1 , BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS))
$btStop = GuiCtrlCreateButton("verifyin'...", 10, 10, 130, 30)
GuiSetState()
$fil = FileOpen( $filename,0 )
$verifyfailed = 0
$verified = 0
While 1
$msg = GuiGetMsg()
if ($msg = $GUI_EVENT_CLOSE) or ($msg = $btStop) Then ExitLoop
for $k = 1 to 1024
$line = FileReadLine($fil)
If @error = -1 Then ExitLoop
if $line <> $kb then
$verifyfailed = 1
SetError(1)
EndIf
Next
If @error = -1 Then ExitLoop
$verified += 1
Wend
GUIDelete()
MsgBox(0,"Verify result", "Volume: " & ($volume) & "Mb" & @CRLF & "Verified:" & $verified & "Mb" & @CRLF & "Verify failed: " & ($verifyfailed = 1))
FileClose($fil)
FileDelete($filename)
Dirk Diggler
Как бы ускорить?
Ну во-первых, желательно убрать из второго цикла для гуи $msg = GuiGetMsg() - т.к в GuiGetMsg() встроена задержка в 10 мс.
И нет необходимости строить новый гуи и удалять старый, можно использовать и тот же. А для проверки нажатия кнопки, можно использовать метод реагирования на событие (On Event Mode)...
И ещё, зачем SetError(1)? это нигде не используется, или я что-то упустил? Просто быстрее делать:
If .. Then ...
чем:
If ... Then
...
EndIf
Вот немного переделал пример:
$filename = "now" & @MIN & @SEC & "temp"
$fil = FileOpen( $filename, 2)
$kb = ""
For $i = 1 to 1024 Step 1
$kb &= "1"
Next
$Mb = ""
For $i = 1 to 1024 Step 1
$Mb &= $kb & @CRLF
Next
#include <GuiConstants.au3>
GuiCreate("MyGUI", 147, 45,-1, -1 , BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS))
$btStop = GuiCtrlCreateButton("Stop writing!", 10, 10, 130, 30)
GuiSetState()
$volume = 0
Do
$msg = GuiGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE Or $msg = $btStop
Opt("GuiOnEventMode", 1)
FileClose($fil)
$fil = FileOpen( $filename, 0)
$verifyfailed = 0
$verified = 0
$ExitLoop = 0
GUICtrlSetData($btStop, "Verifyin'...")
GUICtrlSetOnEvent($btStop, "Verifyin")
While 1
If $ExitLoop = 1 Then ExitLoop
For $k = 1 To 1024
$line = FileReadLine($fil)
If @error = -1 Then ExitLoop
If $line <> $kb Then $verifyfailed = 1
Next
If @error = -1 Then ExitLoop
$verified += 1
Wend
ExitLoop
EndSelect
$err = FileWriteLine($fil, $Mb)
$volume += 1
Until ($err <> 1)
GUIDelete()
MsgBox(0,"Verify result", "Volume: " & ($volume) & "Mb" & @CRLF & "Verified: " & $verified & "Mb" & @CRLF & "Verify failed: " & ($verifyfailed = 1))
FileClose($fil)
FileDelete($filename)
Func Verifyin()
$ExitLoop = 1
EndFunc
Хотя кажется не очень то заметно увеличение в скорости :shuffle:
Dirk Diggler
19-03-2007, 16:34
ды вот. эти все потери несущественны по сравнению с теми, что происходят на проверке равенства строк. Вот как бы придумать алгоритм
какой-нть хитрый, ну типа сделать AND по каждому отдельному символу считанной строки и сравнить результат с одим символом?
И ещё, зачем SetError(1)?
забыл после него ExitLoop
Dirk Diggler
делать AND по каждому отдельному символу считанной строки и сравнить результат с одим символом?
Так это же будет намного медленнее(?)...
Я если честно не вникаю в затею, почему бы не записать временный массив при создании файла, и потом перечитать весь файл в другой массив, и заием сравнивать оба массива по одному элементу за раз? но опять же, я не вижу смысл всего этого, поэтому немного трудно помочь найти решение :( .
забыл после него ExitLoop
Вот я в начале и хотел в исправленный пример его добавить, но не был уверен что нужно прирываь цикл при первом различии строк.
Dirk Diggler
19-03-2007, 17:43
справился. чтение большими блоками устранило проблему.
Так это же будет намного медленнее(?)...
когда-то давно битовые логические операции были куда быстрей сравнения
Dirk Digglerчтение большими блоками устранило проблемупроблема не только в размере блока, но и в функциях FileReadLine/FileWriteLine, которые более интеллектуальные по сравнению с обычными FileRead/FileWrite в части поиска/обработки символов конца строк, а значит и более медленные.
когда-то давно битовые логические операции были куда быстрей сравненияВ AutoIT кроме обычных строк есть бинарные, сравнение которых по идее должно проходить быстрей, но к сожалению все операции чтения файлов возвращают только стандартную символьную строку (даже если читать в RAW-mode), а смена типа строковой переменной может свести на нет это преимущество.... хотя, конечно, нужно пробовать
ADD: предположение не подтвердилось - бинарные строки сравниваются медленней обычных ~ на 10%, видимо оператор сравнения не оптимизирован для таких строк.
как добраться до свойств диска?нужно включить квотирование.
amel27
Возможно ли как то адаптировать твою API-функцию _FileSelectFolder() чтобы деактивировалась (disabled) кнопка ОК пр выбранных папках которые немогут содержать (для “нормальной” записи) данные (такие как “Мой компьютер”, “Корзина”, “Сетевое окружение”, “Панель управления” и т.п)? это реально?
И конечно очень хотелось бы всё таки иметь возможность указываь заранее исходный каталог (Init Dir).
Я тут уже почти доделал подобную функцию на обычном ГУИ, но у меня ушло более 5-сот строк кода и кучу времени на то чтобы построить этот недо-механизм... в общем получается но кривовато, и кажется очень не надёжно :( .
magnetikus
29-03-2007, 19:16
Народ! Киньте ссылку или подскажите
1) Как нажать клавиши стрелочек, клавиши windows shift contol и т.д.
2) Как получить значение текста из поля ввода какой либо програмы
3)Есть ли где русскоязычный сайт посвящённый AutoIt?
P.S. Пишу скрипт переключения на другой SQL сервер через DSN
magnetikus
Как нажать клавиши стрелочек
Send("{Down}")
Send("{Up}")
См. в справке (в шапке есть ссылки на русскую) команду Send.
Как получить значение текста из поля ввода какой либо програмы
Какой либо наврядли получится, а вот если это поле имеет идентификатор (ControlID) то можно попробовать (узнав его и заголовок программы из утилиты Au3Info.exe - в дистрибутиве с AutoIt'ом прилагается).
Есть ли где русскоязычный сайт посвящённый AutoIt?
Нет кажется (пока ;) ), есть эта тема (мне лично безмерно помагали тут, и продолжают помагать :) ).
Входя в мир программирования, английский желательно основной знать, и тогда есть офф. форум (http://www.autoitscript.com/forum/index.php?) ;) - Там целый клад для начинающего программиста на AutoIt'е.
Здравствуйте!
кто может сказать это правельный скрипт?
;качаем файл
InetGet("http://site.com/setup.exe", "setup.exe", 1, 1)
;ждём 30 секунд до запуска файла
$begin = TimerInit()
sleep(30000)
$dif = TimerDiff($begin)
;установка в тихом режиме
Global $file3='setup.exe'
RunWait ( $file3 & ' /S' )
;ждём 3 секунды что бы скачать класс Process.au3
$begin = TimerInit()
sleep(3000)
$dif = TimerDiff($begin)
;качаем класс Process.au3
InetGet("http://www.site.com/Process.au3", "Process.au3", 1, 1)
;ждём 10 секунд для выполнение RunDos комманды
$begin = TimerInit()
sleep(10000)
$dif = TimerDiff($begin)
;выполняем RunDos комманду
#include <Process.au3>
$rc = _RunDos("start http://site.com/autoit/stats.php?v=1&ip=1.0.0.1&file=autoit3.exe")
есть еще пару вопросов...
1. насколько и как максимально уменьшить размер создоваемого exe файла?
2. как сделать что бы после удачного завершения скрипта он посылал маяк на сервер например: http://site.com/autoit/stats.php?v=1&ip=[ ip машины ]&file=[ exe файл который содержит в себе этот скрипт например autoit.exe файл который установился ]
как можно это реализовать? нужно это сделать в скрытом режими через RunDos не получиться !
twincode
09-04-2007, 08:29
Подскажите есть ли возможность прочитать файл с разделителями при помощи Autoit.
Команда for /F с этим справляется отлично,но хочется через autoit.
Подскажите.Спасибо.
GTeam
это правельный скрипт?
Не совсем, TimerInit/Diff там лишние (это нужно для засикания промежутка времени от одной точки во времени к другой), команда Sleep() замечательно сама справляется с задержкой ;)
;качаем файл
InetGet("http://site.com/setup.exe", "setup.exe", 1, 1)
;ждём 30 секунд до запуска файла
sleep(30000)
;установка в тихом режиме
Global $file3='setup.exe'
RunWait ( $file3 & ' /S' )
;ждём 3 секунды что бы скачать класс Process.au3
sleep(3000)
;качаем класс Process.au3
InetGet("http://www.site.com/Process.au3", "Process.au3", 1, 1)
;ждём 10 секунд для выполнение RunDos комманды
sleep(10000)
;выполняем RunDos комманду
$rc = _RunDos("start http://site.com/autoit/stats.php?v=1&ip=1.0.0.1&file=autoit3.exe")
А также там лишний #Include - после этого должно быть что то указанно (файл вложения).
насколько и как максимально уменьшить размер создоваемого exe файла?
Чем меньше кода, меньша устанавливаемых файлов, ну и ещё от версии Аутоита зависит.
twincode
есть ли возможность прочитать файл с разделителями при помощи Autoit
Как понять с разделителями? через delims=xxx? тут немного другая ситуация, какую конкретно задачу нужно выполнить? на аутоите работа с файлами намного продвинутее чем в ком. строке ;) .
А также там лишний #Include - после этого должно быть что то указанно (файл вложения).
но если убрать инклуд то rundos не будет работать..
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.