|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:. |
|
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.
|
(*.*) Сообщения: 36570 |
Внимание! В связи с созданием отдельного форума по AutoIt, эта тема переводится в архивное состояние. Если у вас есть вопрос, создайте новую тему или поднимите существующую, если в ней обсуждается аналогичная проблема. Пожалуйста, не создавайте тем с названием "Помогите!" или "Нужна помощь по AutoIt". Это и так понятно ![]() ![]() Сайт программы Русская справка Коллекция AutoIt скриптов от Sanja Alone Коллекция AutoIt скриптов от MSFN (могут быть устаревшие). Справочник по командам rundll32 (команды запуска диалоговых окон и не только...) AutoIt скрипты - введение и FAQ (статья содержит вводную информацию по AutoIt, а также ответы на ЧаВо). Архивы старых тем по AutoIt или они же в 7z архиве (версии для печати) - 846 кб (настоятельно рекомендуется к прочтению/поиску) (он же прикреплен в шапке) Данная тема предназначена для общих вопросов по AutoIt. Вопросы по установке приложений при помощи AutoIt следует задавать в соответствии с правилами форума "Автоматическая установка приложений". Таким образом, если вы хотите узнать как установить Winamp 5.x при помощи AutoIt, то создайте тему [autoit] Winamp 5.х (если таковой еще нет на форуме). Проверить наличие тем можно при помощи поиска или фильтров. Цитата Vadikan:
|
||
------- Отправлено: 00:02, 05-02-2006 |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать Dim $var1 = '"' & @WindowsDir & '\' Run(@ComSpec & " /c " & 'rundll32.exe Shell32.dll,Control_RunDLL desk.cpl desk,@Themes /Action:OpenTheme /File:' & $var1 & 'Resources\Themes\Blackbox.theme"', "", @SW_HIDE) WinWait("Display Properties", "", 3) $handle = WinGetHandle("Display Properties", "") WinSetState($handle, "", @SW_HIDE) ;ControlClick("Display Properties", "", "[Class:Button; Instance:3]", "Left", 1) Send("{ENTER}") Exit ![]() |
Последний раз редактировалось semiono, 12-11-2008 в 09:21. Отправлено: 09:06, 12-11-2008 | #1141 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать semiono
Цитата semiono:
|
|
Отправлено: 09:22, 12-11-2008 | #1142 |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать Я понял фитчу! Дело в том что не все окна наверное умеют скрыться... Вот с MINIMIZE пошло!
------ А, ага! прочёл, но наверное не то чтобы нельзя нажать, а видимо свойства окна не позволяют его вообще скрыть!? Хотя, главное что я понял в чём трабла, ато уже забодало, нажимать и смотреть результат! ![]() |
------- Отправлено: 09:28, 12-11-2008 | #1143 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27, Я тут в придачу к твоим функциям _AU3_* написал ещё одну, _AU3_MergeAllLibs() - превращает исходный скрипт в один целый, со всеми инклюдами (указанными в нём) и константами. Для это мне пришлось немного изменить _AU3_GetAllLibUDF, чтобы возвращала ещё и полный путь к инклюду.
_AU3_MergeAllLibs(@ScriptDir & "\Test.au3", 0, 0, 1) ; =============================================================== ; _AU3_MergeAllLibs($sScriptFile, $iIncludeComments=0, $iRemoveIncludes=1) ; --------------------------------------------------------------- ; Смешивает вложенные библиотеки в тело скрипта ; (таким образом преобразовывая один цельный скрипт со всеим функциями и переменными) ; Использован AutoIT v3.2.12.1 ; ; $sScriptFile : AutoIT-скрипт для смешивания ; $iIncludeComments : Определяет, нужно ли обрабатывать закомментированные строки ; $iIncludeEmptyLines : Определяет, нужно ли обрабатывать пустые строки ; $iRemoveIncludes : Определяет, нужно ли удалять строки #include'ов с исходного скрипта ; ; Автор : G.Sandler (a.k.a CreatoR) ; =============================================================== Func _AU3_MergeAllLibs($sScriptFile, $iIncludeComments=0, $iIncludeEmptyLines=0, $iRemoveIncludes=1) Local $aGetAllLibs, $aScript_Content, $sRead_SrcScript, $sHeader_Content, $hFOpen, $iIsFuncBody = 0 $sRead_SrcScript = FileRead($sScriptFile) _AU3_GetAllLibUDF($sRead_SrcScript, $aGetAllLibs) If $iRemoveIncludes Then $sRead_SrcScript = StringRegExpReplace($sRead_SrcScript, "(?i)(?s)#include.*?[\r\n]+", "") For $i = $aGetAllLibs[0][0] To 1 Step -1 $iIsFuncBody = 0 $aScript_Content = StringSplit(StringStripCR(StringStripWS(FileRead($aGetAllLibs[$i][1]), 3)), @LF) For $j = 1 To $aScript_Content[0] If Not $iIncludeEmptyLines And $aScript_Content[$j] = "" Then ContinueLoop If Not $iIncludeComments And StringLeft($aScript_Content[$j], 1) = ";" Then ContinueLoop If StringLeft($aScript_Content[$j], 8) = "#include" Then ContinueLoop ;We don't need the #includes, right? ElseIf StringLeft($aScript_Content[$j], 4) = "Func" Then $sRead_SrcScript &= @CRLF $iIsFuncBody = 1 ElseIf StringLeft($aScript_Content[$j], 7) = "EndFunc" Then $sRead_SrcScript &= $aScript_Content[$j] & @CRLF $iIsFuncBody = 0 ContinueLoop EndIf If Not $iIsFuncBody Then ;Write to the Begining of file (Collecting the variables/constants Header) $sHeader_Content &= $aScript_Content[$j] & @CRLF Else ;Write to the End of file (UDF functions) $sRead_SrcScript &= $aScript_Content[$j] & @CRLF EndIf Next Next If $sHeader_Content <> "" Then $sRead_SrcScript = $sHeader_Content & @CRLF & $sRead_SrcScript $hFOpen = FileOpen($sScriptFile, 2) FileWrite($hFOpen, $sRead_SrcScript) FileClose($hFOpen) EndFunc ; ==> _AU3_MergeAllLibs ; =============================================================== ; _AU3_GetAllLibUDF($sScript_Content, $aIncludes_Arr) ; --------------------------------------------------------------- ; Возвращает массив всех загруженных UDF и библиотечных файлов ; Использован AutoIT v3.2.12.0 ; ; $sScript_Content : текст AutoIT-скрипта ; $aIncludes_Arr : ссылка на переменную для выходного массива, ; по выходу содержит двумерный массив: ; $aIncludes_Arr[0][0] - количество элементов в массиве ; $aIncludes_Arr[$i][0] - тип библиотечного файла ; $aIncludes_Arr[$i][1] - Полный путь библиотечного файла ; $aIncludes_Arr[$i][2] - Только имя библиотечного файла ; $aIncludes_Arr[$i][3] - массив UDF, определенных в файле ; ; Функция рекурсивная, поэтому выход по ошибке не предусмотрен ; ; Автор : amel27 ; =============================================================== Func _AU3_GetAllLibUDF($sScript_Content, ByRef $aIncludes_Arr) Local Const $rFile = '(?i)(?:^|[\n\r])[ \t]*#include[ \t]+((?:\<|")[^\n\r\"\>]+(?:\>|"))' Local Const $rUDFs = '(?i)(?:^|[\n\r])[ \t]*Func[ \t]+([\w\d]+)' ; Инициализация массива при первом входе / сохранение списка UDF If UBound($aIncludes_Arr, 2) <> 4 Then Dim $aIncludes_Arr[2][4] = [[1, 0, 0], [0, "", 0]] $aIncludes_Arr[$aIncludes_Arr[0][0]][3] = StringRegExp($sScript_Content, $rUDFs, 3) ; Инициализация переменных / Получение списка библиотечных файлов Local $sPath, $iType, $sName, $sText Local $aFile = StringRegExp($sScript_Content, $rFile, 3) ; Пофайловая обработка списка библиотек If IsArray($aFile) Then For $i = 0 To UBound($aFile)-1 $sPath = _AU3_LibIncToPath($aFile[$i]) ; полное имя файла If @error Then ContinueLoop ; файл не найден $iType = @extended ; тип библиотеки $sName = StringRegExpReplace($sPath, "(?:[^\\]+\\)+", "") ; краткое имя файла ; Исключение повторной обработки / Чтение файла For $j = 1 To $aIncludes_Arr[0][0] If $aIncludes_Arr[$j][0] == $iType And $aIncludes_Arr[$j][2] == $sName Then ContinueLoop 2 Next $sText = FileRead($sPath) If @error Then ContinueLoop ; При успешном чтении добавляем файл в выходной массив $aIncludes_Arr[0][0] += 1 ReDim $aIncludes_Arr[$aIncludes_Arr[0][0]+1][4] $aIncludes_Arr[$aIncludes_Arr[0][0]][0] = $iType $aIncludes_Arr[$aIncludes_Arr[0][0]][1] = $sPath $aIncludes_Arr[$aIncludes_Arr[0][0]][2] = $sName ; Рекурсивный вызов на обработку текста библиотеки _AU3_GetAllLibUDF($sText, $aIncludes_Arr) Next EndIf EndFunc ; ==> _AU3_GetAllLibUDF ; =============================================================== ; _AU3_LibIncToPath($sInclude) ; --------------------------------------------------------------- ; Возвращает полный путь к библиотечному файлу по строке загрузки ; Использован AutoIT v3.2.12.0 ; ; $sInclude : строка загрузки в формате #include, примеры: ; '<array.au3>' ; '"array.au3"' ; '"c:\Program Files\AutoIT3\Include\array.au3"' ; ; При успехе : возвращает полное имя файла, содержащее путь, ; макрос @extended указывает на тип библиотеки: ; 1 - системная библиотека (каталог установки) ; 2 - текущая библиотека (каталог скрипта) ; 3 - пользовательская библиотека (путь из реестра) ; 4 - путь к библиотеке явно указан при загрузке ; ; При неудаче : возвращает пустую строку и устанавливает @error: ; 1 - ошибка формата строки ; 2 - файл не найден ; ; Автор : amel27 ; =============================================================== Func _AU3_LibIncToPath($sInclude) Local $aRegExp = StringRegExp($sInclude, '^(<|")([^>"]+)(?:>|")$', 3) ; Проверка на корректность формата строки If Not IsArray($aRegExp) Then Return SetError(1, 0, "") $sInclude = $aRegExp[1] If StringInStr($sInclude, "\") = 0 Then Local $sSYS, $sUDL, $aUDL, $sAU3 = @ScriptDir & "\" & $sInclude ; Определение каталога системных библиотек $sSYS = StringRegExpReplace(@AutoItExe, "\\[^\\]+$", "") $sSYS &= "\Include\"& $sInclude ; Чтение списка каталогов пользовательских библиотек $sUDL = RegRead("HKCU\Software\AutoIt v3\AutoIt", "Include") $aUDL = StringRegExp($sUDL, "([^;]+)(?:;|$)", 3) ; Проверка типов 1 и 2 (до пользовательских библиотек) If $aRegExp[0] == '<' Then If FileExists($sSYS) Then Return SetError(0, 1, $sSYS) ElseIf $aRegExp[0] == '"' Then If FileExists($sAU3) Then Return SetError(0, 2, $sAU3) EndIf ; Проверка типа 3 (поиск среди пользовательских библиотек) If IsArray($aUDL) Then For $i = 0 To UBound($aUDL)-1 $aUDL[$i] &= "\" & $sInclude If FileExists($aUDL[$i]) Then Return SetError(0, 3, $aUDL[$i]) Next EndIf ; Проверка типов 1 и 2 (после пользовательских библиотек) If $aRegExp[0] == '<' Then If FileExists($sAU3) Then Return SetError(0, 2, $sAU3) ElseIf $aRegExp[0] == '"' Then If FileExists($sSYS) Then Return SetError(0, 1, $sSYS) EndIf Else ; Проверка типа 4 (файл с указанием полного пути) If FileExists($sInclude) Then Return SetError(0, 4, $sInclude) EndIf ; ОШИБКА: файл не найден Return SetError(2, 0, "") EndFunc ; ==> _AU3_LibIncToPath Если запустить в AutoIt 3.2.8.1, то можно убедиться, что изменение структуры #includ'ов в новых версиях было оправдано, в одной лишь Array сколько констант и UDF'ов. |
------- Отправлено: 01:33, 14-11-2008 | #1144 |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать Кто придумал эти си подобные языки! Или либо я в логике запутался, мне что <>1 что =1 трудно уловить так быстро. Но поидее после ControlCommand должна работать разумно, но оно вроде только выполняет либо чек, либо анчек при разных указаниях еррор и поидее вообще ничего не даёть. (нафиг нужно действие противоположное событию)
Если бы я "придумывал язык" я бы зделал - установить чекбокс (даже если он был установлен) и выполнять код дальше. Зачем усложняться то! ![]() Столько функций и ни одной не могу выбрать, чтоб uncheck либо check безовсяких условий конкретно? |
------- Отправлено: 07:57, 14-11-2008 | #1145 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
Цитата:
![]() semiono гм, забавно... сначала проверяется - стоит галка или нет на чекбоксе, и если при проверке возникла ошибка (например, чекбокса нет), то кликаем (?) левой кнопкой... а если проверка успешная (ура, такой чекбокс существует), то молча идем дальше - само состояние чекбокса тут вообще не проверяется, иначе было бы типа такого: |
||
Отправлено: 08:40, 14-11-2008 | #1146 |
Ветеран Сообщения: 604
|
Профиль | Отправить PM | Цитировать Цитата semiono:
![]() ![]() |
|
------- Отправлено: 08:47, 14-11-2008 | #1147 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Maza Faka, где у меня ошибка?
|
Отправлено: 09:08, 14-11-2008 | #1148 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27,
Цитата amel27:
Цитата amel27:
Цитата amel27:
![]() Но идея неплохая, нужно чтобы если коменты не пишутся, добавлять имена инклюдов... semiono, Цитата semiono:
#include <GuiConstants.au3> $GUI = GUICreate("Test Script", 300, 200) $CheckBox = GUICtrlCreateCheckbox("CheckMe!", 20, 40) GUICtrlSetState($CheckBox, $GUI_CHECKED) ;Тут мы сами отмечаем птичку (ради проверки) GUISetState(@SW_SHOW, $GUI) ControlCommand($GUI, "", $CheckBox, "Check") ;Тут птичка будет отмечена в любом случае ;) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd |
||||
------- Отправлено: 09:08, 14-11-2008 | #1149 |
Новый участник Сообщения: 32
|
Профиль | Отправить PM | Цитировать И снова вопрос к спецам...
реально ли путь @ScriptFullPath получить в Dos кодировке? (дело в том, что его надо прописать в bat, а путь может содержать русские символы) ---------------- Мне нужно сделать так, чтобы после перезагрузки запустился скрипт. Там он будет "продолжать настройку" программы. Я, для этого, прописываю @ScriptFullPath в реестр, а точнее, в RunOnce. Я использую "компилированные" скрипты. Скрипт запускается, отрабатывает...., но существует проблема. Дело в том, что после запуска отрабатывает ТОЛЬКО скрипт, то есть все остальное, включая эксплорер, запускается только после того как отработает скрипт... Мне надо чтобы скрипт запустился в последнюю очередь. Я это пытаюсь сделать путем создания батника, в котором будет прописана команда запуска скрипта. ---------------- Может кто-то подкинет идею? |
------- Отправлено: 09:16, 14-11-2008 | #1150 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[архив - Часть 2] AutoIt скрипты | Vadikan | AutoIt | 985 | 21-01-2008 09:58 | |
Вопрос - [Архив] Антивирусные программы - ОБЩИЕ ВОПРОСЫ | FOX RED | Защита компьютерных систем | 67 | 21-11-2007 15:05 | |
[Архив - Часть 1.3] AutoIt скрипты | biork | AutoIt | 503 | 09-06-2007 11:27 | |
[Архив - Часть 1.2] AutoIt скрипты | Dirk Diggler | AutoIt | 505 | 02-12-2006 11:00 | |
[Архив - Часть 1.1] AutoIt скрипты | EgOrus | AutoIt | 335 | 04-02-2006 16:58 |
|