Войти

Показать полную графическую версию : [Архив - Часть 1.3] AutoIt скрипты


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [15] 16 17 18 19 20 21 22 23 24 25 26

Creat0R
16-03-2007, 11:08
Sancho111
Error Uknown Function name
Какая у тебя версия AutoIt? и на сколько я помню, должна быть поддержка AutoIt3x...

Установи последнюю версию (http://www.autoitscript.com/autoit3/downloads.php).

Creat0R
16-03-2007, 12:40
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.

VelDmi
16-03-2007, 13:12
Creat0R
Что то никак не соображу как использовать Regshot.
Жмакаешь кнопку 1 снимок, потом делаешь изменения в системе (например ставишь галочку в или двигаешь ползунок), затем жмакаешь 2 снимок, затем сравнить.
Он сравнит состояния реестра до и после и выдаст изменения.

Creat0R
16-03-2007, 13:39
VelDmi
Жмакаешь кнопку 1 снимок, потом делаешь изменения в системе (например ставишь галочку в или двигаешь ползунок), затем жмакаешь 2 снимок, затем сравнить.
Он сравнит состояния реестра до и после и выдаст изменения.
Ну я как бы прочитал Readme, но спасибо всё ровно... просто я не совсем понял как мне это поможет узнать промежуточные значения для скорости произношения речи.

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

Sanja Alone
16-03-2007, 15:23
Creat0R
как мне это поможет узнать промежуточные значения для скорости произношения речи
Пуск -> Панель управления -> Речь -> Скорость голоса. Двигаем ползунок и смотрим regshot-ом. Хотя я тебе и так уже все возможные значения выдал интуитивным методом :)

Creat0R
16-03-2007, 15:38
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)

Creat0R
19-03-2007, 10:09
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

Creat0R
19-03-2007, 16:51
Dirk Diggler
делать AND по каждому отдельному символу считанной строки и сравнить результат с одим символом?
Так это же будет намного медленнее(?)...

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

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

Dirk Diggler
19-03-2007, 17:43
справился. чтение большими блоками устранило проблему.

Так это же будет намного медленнее(?)...

когда-то давно битовые логические операции были куда быстрей сравнения

amel27
20-03-2007, 03:57
Dirk Digglerчтение большими блоками устранило проблемупроблема не только в размере блока, но и в функциях FileReadLine/FileWriteLine, которые более интеллектуальные по сравнению с обычными FileRead/FileWrite в части поиска/обработки символов конца строк, а значит и более медленные.
когда-то давно битовые логические операции были куда быстрей сравненияВ AutoIT кроме обычных строк есть бинарные, сравнение которых по идее должно проходить быстрей, но к сожалению все операции чтения файлов возвращают только стандартную символьную строку (даже если читать в RAW-mode), а смена типа строковой переменной может свести на нет это преимущество.... хотя, конечно, нужно пробовать

ADD: предположение не подтвердилось - бинарные строки сравниваются медленней обычных ~ на 10%, видимо оператор сравнения не оптимизирован для таких строк.

mel_kos
23-03-2007, 12:28
как добраться до свойств диска?нужно включить квотирование.

Creat0R
26-03-2007, 22:39
amel27

Возможно ли как то адаптировать твою API-функцию _FileSelectFolder() чтобы деактивировалась (disabled) кнопка ОК пр выбранных папках которые немогут содержать (для “нормальной” записи) данные (такие как “Мой компьютер”, “Корзина”, “Сетевое окружение”, “Панель управления” и т.п)? это реально?
И конечно очень хотелось бы всё таки иметь возможность указываь заранее исходный каталог (Init Dir).

Я тут уже почти доделал подобную функцию на обычном ГУИ, но у меня ушло более 5-сот строк кода и кучу времени на то чтобы построить этот недо-механизм... в общем получается но кривовато, и кажется очень не надёжно :( .

magnetikus
29-03-2007, 19:16
Народ! Киньте ссылку или подскажите
1) Как нажать клавиши стрелочек, клавиши windows shift contol и т.д.
2) Как получить значение текста из поля ввода какой либо програмы
3)Есть ли где русскоязычный сайт посвящённый AutoIt?
P.S. Пишу скрипт переключения на другой SQL сервер через DSN

Creat0R
30-03-2007, 17:33
magnetikus
Как нажать клавиши стрелочек

Send("{Down}")
Send("{Up}")
См. в справке (в шапке есть ссылки на русскую) команду Send.

Как получить значение текста из поля ввода какой либо програмы
Какой либо наврядли получится, а вот если это поле имеет идентификатор (ControlID) то можно попробовать (узнав его и заголовок программы из утилиты Au3Info.exe - в дистрибутиве с AutoIt'ом прилагается).

Есть ли где русскоязычный сайт посвящённый AutoIt?
Нет кажется (пока ;) ), есть эта тема (мне лично безмерно помагали тут, и продолжают помагать :) ).
Входя в мир программирования, английский желательно основной знать, и тогда есть офф. форум (http://www.autoitscript.com/forum/index.php?) ;) - Там целый клад для начинающего программиста на AutoIt'е.

GTeam
08-04-2007, 05:38
Здравствуйте!

кто может сказать это правельный скрипт?

;качаем файл
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.
Подскажите.Спасибо.

Creat0R
09-04-2007, 12:31
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? тут немного другая ситуация, какую конкретно задачу нужно выполнить? на аутоите работа с файлами намного продвинутее чем в ком. строке ;) .

GTeam
09-04-2007, 13:15
А также там лишний #Include - после этого должно быть что то указанно (файл вложения).
но если убрать инклуд то rundos не будет работать..




© OSzone.net 2001-2012