Показать полную графическую версию : [архив - Часть 2] AutoIt скрипты
mariolast
30-09-2007, 09:54
amel27, функция WinWaitClose() обязательна?.. попробуйте без них »
Застревает то как раз на
WinWaitActive ( "FontNav" )
mariolast
из вашего объяснения не видно каким образом происходит последовательный запуск - пакетным файлом, из MSI-пакетов, AU3-скрипта или еще каким образом... не исключено что предыдущий этап может завершаться после начала следующего. В качестве эксперимента запустите отдельный скрипт ожидающий только WinWaitActive ("FontNav") (чтобы исключить взаимное влияние) - если будет "застревать", значит нужно играть с параметрами идентификации окна - "AutoIt Window Info" в помощь :)
mariolast
30-09-2007, 11:10
Если запустить
setup.msi /qn, то он и так все установит, сначала сам отработает, а затем поочередно запустятся файлы EN.msi -> VBA.msi -> FontNav.msi
Что я делаю. Пакую все в саморасп. архив Winrar и в самом Винраре задаю запуск setup = setup.exe /qn
Так вот винрар после отработки установщика setup.msi считает работу завершенной, и остальные 3 файла ему по барабану, он закрывается и удаляет врем. файлы, так что успевает запустится только EN.msi и то не всегда, остальных два нет. Вот поэтому нужен скрипт, чтоб заставить ВинРАР работать, пока не поставится все что надо. Запускать вручную EN.msi -> VBA.msi -> FontNav.msi не подходит, ибо если вручную запущу, то винрар то будет работать, следовательно цепочка EN.msi -> VBA.msi -> FontNav.msi будет продолжать работать и при этом будет ошибка при вызове двух msi. Может как то через процессы отследить msiexec?
amel27,
Именно им и игрался "AutoIt Window Info"
mariolast
тогда тем более убери из скрипта обработку всех несущественных промежуточных окон - сконцентрируйся только на последнем, собственно только его и нужно дождаться
Это видимо такие настройки для этой панели (хотя у себя такого никогда не замечал), посмотри в панели управления её настройки. »
А что именно я должен увидеть там?
mariolast
30-09-2007, 15:49
Ограничился пока
WinWait ( "FontNav" )
WinWaitClose ( "FontNav" )
amel27,
переделал базовый скрипт с целью уменьшения размера выходного текста и учетом новых познаний в регулярных выражениях
Отлично, спасибо.
убрал из стилей жирный шрифт, опять же для уменьшения количества форматных символов.
Его можно добавлять в конце, как и тег [cоde] ;)
Уже занимаюсь импортом этой функции в Au3ToPost с GUI...
amel27 и Все,
Обновил и GUI версию - Au3ToPst 1.6 (http://creator-lab.ucoz.ru/load/3-1-0-18)
Список изменении...
v1.6
Обновлена главная функция обработки:
- Убраны промежуточные замены на "#", теперь этот символ можно использовать в коде;
- Добавлено черезстрочное объединение стилей, если стиль не изменяется от строки к строке;
- Убран из стилей жирный шрифт, опять же для уменьшения количества форматных символов.
(Добавляется в конце обработкти).
Добавлена поддержка быстрого режима - если передаётся ком. строка (путь к обрабатываемому файлу), и поставлена соответствующая опция в главном Меню, то скрипт обрабатывается в тихом режиме (без GUI), обработанный код по окончанию помещается в буфер обмена.
Исправления и улучшения при интеграции в SciTE:
- Значительно усовершенствован метод интеграции.
- При повторной интеграции пункты в файле настроек (au3.properties) больше удваиваться не будут.
- Теперь новые значения и пункты будут прописываться в любом случае.
- Теперь при вызове программы из меню SciTE документ сразу будет сохранён.
Ещё одна поправка большой загрузки ЦП (в дочернем диалоге вывода результатов).
Поправки в некоторых элементах GUI.
Общие улучшения в коде.
amel27,
Кстати, #Region так и не распознавался, я добавил стиль t_12 с заменой на цвет #A00FF0 (текстового значения этого цвета я не знаю :( ).
Кстати, #Region так и не распознавалсяа... так это новый стиль, а я думал только решетка мешаласьдобавил стиль t_12 с заменой на цвет #A00FF0 (текстового значения этого цвета я не знаю )[color=darkmagenta][i] почти подходит - как у чисел, только без жирного шрифта
amel27,
[color=darkmagenta][i] почти подходит
Вот этот вроде больше: [cоlor=DarkOrchid] - [сравнение (используется #A00FF0)]. Самая большая таблица цветов что я когда либо видел в сети есть тут (http://www.w3schools.com/html/html_colornames.asp).
Скрипт для конвертирования выделенного текста (a.k.a SwitchIt ;) ):
Запускаем скрипт, выделяем текст в почти любом Edit поле, и жмё Ctrl ` (ё на рус. раскладке) - текст конвертится в набор символов противоположного языка (Eng - Rus) -> Если функции ConvertText как второй параметр передать 0, то всегда будет конвертировать в Русский, если 1 то в Английский (-1 в противоположный).
#NoTrayIcon
Opt("SendKeyDelay", 0)
HotKeySet("^`", "ConvertProc")
HotKeySet("^q", "Quit")
While 1
Sleep(100)
WEnd
Func ConvertProc()
Local $OldClip = ClipGet()
ClipPut("")
Send("^{Insert}")
Local $SelectedText = ClipGet()
If $SelectedText = "" Then Return
Local $NewClip = ConvertText($SelectedText)
ClipPut($NewClip)
Sleep(10)
Send("+{Insert}")
Local $NewClipLenght = StringLen(StringStripCR($NewClip))
Send("+{LEFT " & $NewClipLenght & "}")
Send("{CTRLDOWN}")
Send("{CTRLUP}")
ClipPut($OldClip)
EndFunc
;If $Mode <> 1 and $Mode <> -1 Then Russian language used
;If $Mode = 1 Then English language used
Func ConvertText($Text, $Mode=-1)
Local $StringIsUpper = 0, $TextRet = ""
Local $SplitTextArr = StringSplit($Text, "")
Local $LettersArr = GetLettersArr()
Local $i_0 = 0, $i_1 = 1
If $Mode = 1 Then Local $i_0 = 1, $i_1 = 0
For $i = 1 To $SplitTextArr[0]
If StringIsUpper($SplitTextArr[$i]) Then
$StringIsUpper = 1
Else
$StringIsUpper = 0
EndIf
If $Mode = -1 Then
If StringIsASCII($Text) Then
$i_0 = 0
$i_1 = 1
Else
$i_0 = 1
$i_1 = 0
EndIf
EndIf
For $j = 1 To $LettersArr[0][0]
If $SplitTextArr[$i] = $LettersArr[$j][$i_0] Then
$SplitTextArr[$i] = $LettersArr[$j][$i_1]
ExitLoop
EndIf
Next
If $StringIsUpper = 1 Then $SplitTextArr[$i] = StringUpper($SplitTextArr[$i])
$TextRet &= $SplitTextArr[$i]
Next
Return $TextRet
EndFunc
Func GetLettersArr()
Local $LettersArr = _Array2DCreate("`|q|w|e|r|t|y|u|i|o|p|[|]|a|s|d|f|g|h|j|k|l|;|'|z|x|c|v|b|n|m|,|.|/", _
"ё|й|ц|у|к|е|н|г|ш|щ|з|х|ъ|ф|ы|в|а|п|р|о|л|д|ж|э|я|ч|с|м|и|т|ь|б|ю|.")
Return $LettersArr
EndFunc
Func _Array2DCreate($1DStr, $2DStr, $Delim="|")
Local $2DArray[1][1], $iUbound
Local $BiggestArray = StringSplit($1DStr, $Delim)
Local $SmallestArray = StringSplit($2DStr, $Delim)
If UBound($SmallestArray) > UBound($BiggestArray) Then
Local $TempArray = $BiggestArray
$BiggestArray = $SmallestArray
$SmallestArray = $TempArray
EndIf
ReDim $SmallestArray[UBound($BiggestArray)]
For $i = 1 To UBound($BiggestArray)-1
$iUbound = UBound($2DArray)
ReDim $2DArray[$iUbound+1][2]
$2DArray[$iUbound][0] = $BiggestArray[$i]
If $SmallestArray[$i] <> "" Then $2DArray[$iUbound][1] = $SmallestArray[$i]
Next
$2DArray[0][0] = $iUbound
Return $2DArray
EndFunc
Func Quit()
Exit
EndFunc
По поводу этого скрипта есть вопрос:
Возможно ли получить текст в реальном времени, даже если он не выделен? т.е каким то образом распознать (возможно через API-методы) расположение курсора, и получить текст со сфокусированного элемента?
amel27,
По поводу раскраски... как видно с моего последнего примера, все первые строки кода после одной пустой строки (если она имеет символ Tab'а в начале), сдвигаются как бы в право, я не могу понять в чём дело, это глюк форума или скрипта? и как это можно поправить?
Maza Faka
01-10-2007, 17:06
Как сделать, что бы при выборе любого элемента "WS", pattern- элемент "Выбрать всё" окрашивался в серый цвет?
#include <GUIConstants.au3>
Global $one, $two, $three, $four, $five, $six, $seven, $eight, $nine, $ten
GUICreate("Test", 460, 300)
$tree = GUICtrlCreateTreeView(250, 70, 130, 200, BitOR($TVS_HASBUTTONS, $TVS_LINESATROOT, $TVS_CHECKBOXES, $TVS_HASLINES))
$all = GUICtrlCreateTreeViewItem("Выбрать все", $tree)
Global $TreeArray[11] = [10, $one, $two, $three, $four, $five, $six, $seven, $eight, $nine, $ten]
For $i = 1 To $TreeArray[0]
$TreeArray[$i] = GUICtrlCreateTreeViewItem("WS " & $i, $all)
Next
GUISetState()
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $all
If AllTreeCheck($all) Then
For $a = 1 To $TreeArray[0]
GUICtrlSetState($TreeArray[$a], $GUI_CHECKED)
Next
Else
For $a = 1 To $TreeArray[0]
GUICtrlSetState($TreeArray[$a], $GUI_UNCHECKED)
Next
EndIf
EndSelect
WEnd
Func AllTreeCheck($all)
Return BitAND(GUICtrlRead($all), $GUI_CHECKED)
EndFunc
Maza Faka,
Если я правильно понял, то вот:
#include <GUIConstants.au3>
Opt("GuiOnEventMode", 1)
GUICreate("Test", 460, 300)
GUISetOnEvent($GUI_EVENT_CLOSE, "MainEvents")
$tree = GUICtrlCreateTreeView(20, 20, 420, 260, BitOR($TVS_HASBUTTONS, $TVS_LINESATROOT, $TVS_CHECKBOXES, $TVS_HASLINES), $WS_EX_DLGMODALFRAME+$WS_EX_CLIENTEDGE )
$all = GUICtrlCreateTreeViewItem("Select all", $tree)
GUICtrlSetOnEvent(-1, "MainEvents")
Global $TreeArray[11]
For $i = 1 To UBound($TreeArray)-1
$TreeArray[$i] = GUICtrlCreateTreeViewItem("WS " & $i, $all)
GUICtrlSetOnEvent(-1, "MainEvents")
Next
GUISetState()
While 1
Sleep(10)
WEnd
Func MainEvents()
Switch @GUI_CtrlId
Case $GUI_EVENT_CLOSE
Exit
Case $all
Local $State = $GUI_UNCHECKED
If AllTreeCheck($all) Then
$State = $GUI_CHECKED
GUICtrlSetColor($all, 0x0)
Else
GUICtrlSetColor($all, 0x696969)
EndIf
For $a = 1 To UBound($TreeArray)-1
GUICtrlSetState($TreeArray[$a], $State)
Next
Case Else
If AllUnChecked() Then
GUICtrlSetColor($all, 0x696969)
GUICtrlSetState($all, $GUI_CHECKED)
Else
GUICtrlSetColor($all, 0x0)
GUICtrlSetState($all, $GUI_UNCHECKED)
EndIf
EndSwitch
EndFunc
Func AllUnChecked()
For $i = 1 To UBound($TreeArray)-1
If BitAND(GUICtrlRead($TreeArray[$i]), $GUI_CHECKED) Then Return True
Next
Return False
EndFunc
Func AllTreeCheck($all)
Return BitAND(GUICtrlRead($all), $GUI_CHECKED)
EndFunc
Скрипт для конвертирования выделенного текстаgjktpysq crhbgnbr... ой, полезный скриптик Ж) ...кста неплохой повод поюзать Scripting.Dictionary ;)
Возможно ли получить текст в реальном времени, даже если он не выделен?а смысл?... и что есть "элемент" - весь документ, предложение или слово?.. я собственно потому и не юзаю всякие проги из-за их попыток сконвертировать все подряд... Кстати, предложения по интерфейсу проги: неудобно, что выделение снимается сразу после замены, по идее четное кол-во нажатий должно приводить к исходному тексту... соответственно, если ничего не выделено то и замены не должно быть.
я не могу понять в чём дело, это глюк форума или скрипта? и как это можно поправить?это глюк SciTE, он почему-то при экспорте переносит оконечные табуляторы и пробелы в начало следующей строки... Имхо, единственный способ - перед экспортом удалять прям по тексту все "зависшие" табуляторы и пробелы.
2Гуру
Задал вопрос в теме по Прагме, но там пока молчок. Не пинайте ногами, здесь вроде точно по AutoIt'у.
Проблема в активации переводчика Прагма5. Вот выдержки:
1. Перед установкой копируем словари в папку с инсталлятором
2. Во время установки программы вводим артикул 107F-B473
3. По окончании установки щелкаем правой кнопкой мышки по значку в системной панели и выбираем пункт "О программе"
4. Удерживая нажатой клавишу F2, щелкаем по кнопке "Активация... Интернет при этом ДОЛЖЕН быть отключен."
5. Переносим из формы активации в генератор ключей Holder Name и Identification Code, и щелкаем по кнопке "Сгенерировать"
6. Переносим из генератора ключей в форму активации Program Licence и Activation Key, и щелкаем по кнопке "Activate"
Первые 2 пункта по установке никаких сложностей не вызвали - стандартные окна и соответственно скрипт AutoIt в режиме "кликанья". НО вот пункт 3 как AutoIt должен понять? Ведь после установки Прагмы иконка может появиться в любом месте систрея? AU3Info показывает ClassNameNN = ToolbarWindow321 и там находятся все иконки ( в том числе иконка Прагмы и сегодня она в одном месте, завтра уже в другом). Как мне найти ее истинные координаты и щелкнуть правой кнопкой мыши?
amel27, неплохой повод поюзать Scripting.Dictionary
А подробнее можно плиз?
а смысл?... и что есть "элемент" - весь документ, предложение или слово?
Смысл в том, чтобы менять текст введённый в адресную строку браузера не в той раскладке (в моём случае это Opera, там адрес. строка это не стандартный элемент, Au3Info его не видит), и всего лишь. Поэтому нужно получить текст с начала строки. Это реально вообще, т.е просто отслеживать набранный текст и проверять его сиволы? (если не StringIsASCII() тогда конвертить).
неудобно, что выделение снимается сразу после замены, по идее четное кол-во нажатий должно приводить к исходному тексту... соответственно, если ничего не выделено то и замены не должно быть.
Эх, еслиб я знал как это можно сделать... вот это одна из причин ("смысл") по которой нужно получать текст в реальном времени, и соответственно, если этого добиться (как мне кажется), то можно будет и выделять куски текста по количеству исходных символов...
перед экспортом удалять прям по тексту все "зависшие" табуляторы и пробелы.
Что значит "зависшие"? т.е это те строки которые содержат только пробелы и табы, и ничего больше?
Понял, всё сработало, написал функцию для очистки лишних пробелов и табов, и теперь нормально вставляется (см. мой пост (http://forum.oszone.net/post-653127.html#post652379) со скриптом конвертирования ;) ).
amel27,
выделение снимается сразу после замены, по идее четное кол-во нажатий должно приводить к исходному тексту... соответственно, если ничего не выделено то и замены не должно быть.
Придумал как это сделать! :yahoo:
Func ConvertProc()
Local $OldClip = ClipGet()
Send("^{Insert}")
Local $SelectedText = ClipGet()
If $SelectedText = $OldClip Then Return
Local $NewClip = ConvertText($SelectedText)
ClipPut($NewClip)
Sleep(100)
Send("+{Insert}")
Local $NewClipLenght = StringLen($NewClip)
Send("{SHIFTDOWN}")
Send("{LEFT " & $NewClipLenght & "}")
Send("{SHIFTUP}")
ClipPut($OldClip)
EndFunc
Правда с длинными кусками текста немного замедлено выделение, но это всё что я пока могу придумать :).
P.S
Обновил свой пост (http://forum.oszone.net/post-653127.html#post652379).
amel27,
Правда с длинными кусками текста немного замедлено выделение, но это всё что я пока могу придумать
Придумал более лучшее решение, но мне нужна помощь..
Оказывается, нажатие клавиш «Ctrl Shift + Стрелка влево», выделяет предыдущее слово, вот я и подумал, ведь можно подсчитать количество исходных слов в тексте, и соответственно нажимать столько раз «Ctrl Shift Left N» (где N это количество слов)..
Вот примерно так:
$aArray = StringRegExp($NewClip, "[\s\.:;,]*([a-zA-Z0-9-_]+)[\s\.:;,]*", 3)
Send("^+{LEFT " & UBound($aArray) & "}")
Но проблема в том, что это работает только с “чистым” текстом, и при чём латинскими буквами. Т.е если имеем такой текст:
Любой ,не обычный) текст ;)
То выделение происходит не корректно... есть идеи как можно это поправить?
Creat0R,
Скрипт для конвертирования выделенного текста...
Интересный скрипт, правда я не совсем понял в чём конкретно его предназначение... :sorry:
Вот ещё, как вариант... Скрипт для Транслитерации текста (работает только в одну сторону):
#NoTrayIcon
$Dict = ObjCreate("Scripting.Dictionary")
$ru = StringSplit("А|Б|В|Г|Д|Е|Ё|Ж|З|И|Й|К|Л|М|Н|О|П|Р|С|Т|У|Ф|Х|Ц|Ч|Ш|Щ|Ъ|Ы|Ь|Э|Ю|Я","|")
$en = StringSplit("A|B|V|G|D|E|E|Zh|Z|I|Y|K|L|M|N|O|P|R|S|T|U|F|H|Ts|Ch|Sh|Sch|'|Y|'|E|Yu|Ya","|")
For $i=1 To $ru[0]
$Dict.Add($ru[$i],$en[$i])
Next
HotKeySet("^ё", "Translit")
HotKeySet("^й", "Quit")
;~ --------------------------
While 1
Sleep(1000)
WEnd
Func Translit()
Local $String, $Key, $CheckStr, $str, $OldSymbol, $NewSymbol
$CheckStr = ClipGet()
Send("^{INS}")
Sleep(10)
$str = ClipGet()
If $CheckStr = $str Then Return
For $i=1 To StringLen($str)
$OldSymbol = StringMid($str,$i,1)
$Key = StringUpper($OldSymbol)
If $Dict.Exists($Key) Then
If StringIsLower($OldSymbol) Then
$NewSymbol = StringLower($Dict.Item($Key))
Else
$NewSymbol = $Dict.Item($Key)
EndIf
$String &= $NewSymbol
Else
$String &= $OldSymbol
EndIf
Next
ClipPut($String)
Sleep(10)
Send("+{INS}")
EndFunc
Func Quit()
Exit
EndFunc
Diamond,
правда я не совсем понял в чём конкретно его предназначение
Он для конвертирования текста набранного не в той раскладке...
К примеру я пишу:
Ndjq crhbgn nj;t bynthtcty? rcnfnb z lkz 'njuj bcgjkmpe.jdfk <erdf P. (http://www.softlenta.com/ru/document/14090) ;)
Ой, забыл переключить раскладку на русский...
Твой скрипт тоже интересен, кстати я для этого используюовал Буква Зю (http://www.softlenta.com/ru/document/14090) ;)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.