Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Закрытая тема
Настройки темы
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

(*.*)


Сообщения: 36560
Благодарности: 6694


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: Vadikan
Дата: 21-01-2009
Описание: архив
Внимание!


В связи с созданием отдельного форума по AutoIt, эта тема переводится в архивное состояние. Если у вас есть вопрос, создайте новую тему или поднимите существующую, если в ней обсуждается аналогичная проблема.

Пожалуйста, не создавайте тем с названием "Помогите!" или "Нужна помощь по AutoIt". Это и так понятно Заголовок темы должен быть осмысленным.



Сайт программы
Русская справка
Коллекция AutoIt скриптов от Sanja Alone
Коллекция AutoIt скриптов от MSFN (могут быть устаревшие).


Справочник по командам rundll32 (команды запуска диалоговых окон и не только...)

AutoIt скрипты - введение и FAQ (статья содержит вводную информацию по AutoIt, а также ответы на ЧаВо).

Архивы старых тем по AutoIt или они же в 7z архиве (версии для печати) - 846 кб (настоятельно рекомендуется к прочтению/поиску)
(он же прикреплен в шапке)


Данная тема предназначена для общих вопросов по AutoIt. Вопросы по установке приложений при помощи AutoIt следует задавать в соответствии с правилами форума "Автоматическая установка приложений". Таким образом, если вы хотите узнать как установить Winamp 5.x при помощи AutoIt, то создайте тему [autoit] Winamp 5.х (если таковой еще нет на форуме). Проверить наличие тем можно при помощи поиска или фильтров.
Цитата Vadikan:
В теме уже свыше 500 сообщений и поиск нужной информации в ней усложняется. Есть предложение собрать все решения (скрипты) и разместить их на Wiki по принципу "один скрипт - одна статья wiki", добавляя статьи в категорию Autoit. Речь, в принципе, идет об общих решениях, а не о скриптах для установки конкретной программы. Название статьи, очевидно, должно отражать назначение скрипта. Затем можно в шапке просто разместить ссылки на статьи Wiki.

-------
Канал Windows 11, etc | Чат @winsiders

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:02, 05-02-2006

 

Ветеран


Сообщения: 825
Благодарности: 50

Профиль | Отправить PM | Цитировать


Creat0R, А что ты будешь делать при изменении версии AutoIt - вернее при добавлении в него новых конструкций. Я так думаю что щас этот геморой лежит на SciTE. А ты похоже хочешь его на себя переложить. Что это даст? Извини если я не въехал?

Отправлено: 17:10, 11-10-2008 | #991



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


NikLok,
Цитата NikLok:
что ты будешь делать при изменении версии AutoIt - вернее при добавлении в него новых конструкций »
Какие конструкции ещё могут придумать? Просто нужно предусмотреть шаблоны замены, чтобы каждый желающий позже смог менять цвета по необходимости (без лишних телодвижении)...

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 18:11, 11-10-2008 | #992


Аватара для morgan1991

Старожил


Сообщения: 398
Благодарности: 13

Профиль | Сайт | Отправить PM | Цитировать


Люди помогите. Как зделать так чтобы после нажатия левой клавиши мыши скрипт запускал определённую функцию?
что бы было чтото типо "HotKeySet()"

-------
Хочу научиться писать драйвера на с++


Отправлено: 13:06, 12-10-2008 | #993


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата morgan1991:
Как зделать так чтобы после нажатия левой клавиши мыши скрипт запускал определённую функцию? »
Простой способ:

Код: Выделить весь код
#include <Misc.au3>

While 1
    If _IsPressed("01") Then MyFunc()
    Sleep(10)
WEnd

Func MyFunc()

EndFunc
Но есть способ с использованием _MouseSetOnEvent() UDF...

Код: Выделить весь код
#include <MouseSetOnEvent_UDF.au3>

;Disable Primary mouse button *down*, and call our function when mouse button *down* event is recieved
_MouseSetOnEvent($MOUSE_PRIMARYDOWN_EVENT, "MousePrimaryDown_Event")
Sleep(5000)
_MouseSetOnEvent($MOUSE_PRIMARYDOWN_EVENT) ;Enable mouse button back.

MsgBox(64, "Attention!", "Now we disable Secondary mouse button up, and call our function when mouse button up event is recieved.", 5)

;Disable Secondary mouse button *up*, and call our function when mouse button *up* event is recieved
_MouseSetOnEvent($MOUSE_SECONDARYUP_EVENT, "MouseSecondaryUp_Event")
Sleep(5000)
_MouseSetOnEvent($MOUSE_SECONDARYUP_EVENT) ;Enable mouse button back.

Func MousePrimaryDown_Event()
    ConsoleWrite("Primary Mouse Down" & @LF)
EndFunc

Func MouseSecondaryUp_Event()
    ConsoleWrite("Secondar Mouse Up" & @LF)
EndFunc

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 13:41, 12-10-2008 | #994


Аватара для morgan1991

Старожил


Сообщения: 398
Благодарности: 13

Профиль | Сайт | Отправить PM | Цитировать


Creat0R, спс!

-------
Хочу научиться писать драйвера на с++


Последний раз редактировалось morgan1991, 13-10-2008 в 21:43.


Отправлено: 13:43, 12-10-2008 | #995


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Creat0R
Цитата:
чтобы не использовать SciTE вовсе. »
Из спортивного интереса?.. AutoIT без SciTE не распространяется. Или все-таки есть другие причины? NikLok прав - часть поддержки придется взять на себя, тот же список штатных UDF постоянно меняется.
Цитата:
стоит ли вообще этим заморачиваться »
зависит от ответа на предыдущий вопрос ...в общем случае задача разборки текста кода не из легких, но AutoIT имеет достаточно простой синтаксис, поэтому, думаю можно обойтись одним лексическим анализом (без синтаксического). Тем более, что SciTE для раскраски тоже не особо заморачивается синтаксисом, пример тому - строку "{1}" SciTE всегда раскрасит как операторы Send(), что совсем не к месту в регулярных выражениях.
Цитата:
нужно создать шаблоны стилей (в массиве?), и пройтись по ним регулярными выражениями, обрамляя куски кода нужными тегами »
В первом приближении да, но уже обработанные куски кода нужно будет исключать из дальнейшей обработки... Соответственно, порядок применения "фильтров" нужно тоже продумать - это может значительно упростить составление регулярных выражений.

Отправлено: 05:35, 13-10-2008 | #996


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


amel27,
Цитата amel27:
Из спортивного интереса? »
От части да

Цитата amel27:
AutoIT без SciTE не распространяется. Или все-таки есть другие причины? »
Причины есть, такие как:
  • Ускорение обработки.
  • Предотвращение лишней записи файлов на диск.
  • Независимая схема раскраски.
  • И вообще независимость в целом, мне кажется что любая программа по возможности должна уметь работать самостоятельно, и как можно меньше использовать внешние модули.

Цитата amel27:
часть поддержки придется взять на себя, тот же список штатных UDF постоянно меняется. »
Я если честно не вижу как список UDF может повлиять на процесс раскраски? Пока синтаксис не меняется, или не добавляются новые операторы и т.п., менять и поддерживать ничего вроде не нужно будет.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 10:27, 13-10-2008 | #997


Пользователь


Сообщения: 141
Благодарности: 3

Профиль | Отправить PM | Цитировать


Почему это неработает?
$var = IniReadSection("\\"&$sCompName&"\C\FILES\PDFTransformer.ini", "USERINFO")
получается вполне нормальный путь если отправлять ето в месадж. но инирид невидит файл

Отправлено: 10:31, 15-10-2008 | #998


Аватара для Maza Faka

Ветеран


Сообщения: 604
Благодарности: 133

Профиль | Отправить PM | Цитировать


Цитата mikola1983:
Почему это неработает? »
У меня работает, проверь правильность пути и файла.
Код: Выделить весь код
#include <Array.au3> ;Только для ArrayDisplay()

$sCompName = "WS1"
$var = IniReadSection("\\" & $sCompName & "\C\config.ini", "Section")

_ArrayDisplay($var)

-------
Сообщение помогло? Не забудьте нажать на Полезное сообщение


Отправлено: 12:10, 15-10-2008 | #999


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Creat0R
Цитата:
Причины есть, такие как »
существенных вижу только две - "независимая схема раскраски" и "интерес"
про скорость еще рано говорить, про файлы тоже... "независимость" и вовсе штука относительная, особенно в мире программ
Цитата:
не вижу как список UDF может повлиять на процесс раскраски? Пока синтаксис не меняется, или не добавляются новые операторы
Синтаксис на раскраску как раз не влияет - и это гут... иначе проблем не оберешься... к примеру, в CMD раскрасить код на порядок сложнее (нормально, а не как в SciTE). В лексическом анализе без сверки со словарем обойтись проблематично - иначе не отделить функции от операторов, операторы от UDF и т.д. Тот же SciTE поддерживает полный список всех служебных слов - в том числе системных UDF, а эти списки сильно меняются от версии к версии.

Как вариант - восстановить список используемых UDF из самого скрипта. Это позволит строить схемы раскраски, используя:
- имя UDF (это просто);
- имя загружаемого файла, в котором определен UDF (обычно синхронен с именем UDF, хотя и не всегда);
- тип загружаемого файла (системный, пользовательский, другой)... имхо самая полезная фича.

Примеры UDF, с помощью которых можно это реализовать:
Код: Выделить весь код
#include <array.au3>

Global $v[1]
_AU3_GetAllLibUDF (FileRead(@ScriptFullPath), $v)

For $i=1 To $v[0][0]
    ConsoleWrite($v[$i][0] &":"& $v[$i][1] &@CRLF)
    $a = $v[$i][2]
    If IsArray($a) Then
        For $j=0 To UBound($a)-1
        ConsoleWrite(@TAB& $a[$j] &@CRLF)
        Next
    EndIf
Next

; ===============================================================
; _AU3_GetAllLibUDF($text, $var)
; ---------------------------------------------------------------
; Возвращает массив всех загруженных UDF и библиотечных файлов
; Использован AutoIT v3.2.12.0
;
; $text       : текст AutoIT-скрипта
; $var        : ссылка на переменную для выходного массива,
;               по выходу содержит двумерный массив:
;               $var[0][0]  - количество элементов в массиве
;               $var[$i][0] - тип библиотечного файла
;               $var[$i][1] - имя библиотечного файла (без пути)
;               $var[$i][2] - массив UDF, определенных в файле
;
; Функция рекурсивная, поэтому выход по ошибке не предусмотрен
; ===============================================================
Func _AU3_GetAllLibUDF($text, ByRef $var)
    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($var,2)<>3 Then Dim $var[2][3] = [[1,0,0],[0,"",0]]
    $var[$var[0][0]][2] = StringRegExp($text, $rUDFs, 3)
    ; Инициализация переменных / Получение списка библиотечных файлов
    Local $sPath, $iType, $sName, $sText
    Local $aFile=StringRegExp($text, $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 $var[0][0]
                If $var[$j][0]==$iType And $var[$j][1]==$sName Then ContinueLoop 2
            Next
            $sText = FileRead($sPath)
            If @error Then ContinueLoop
            ; При успешном чтении добавляем файл в выходной массив
            $var[0][0] +=1
            ReDim $var[$var[0][0]+1][3]
            $var[$var[0][0]][0] = $iType
                                          $var[$var[0][0]][1] = $sName
            ; Рекурсивный вызов на обработку текста библиотеки
            _AU3_GetAllLibUDF($sText, $var)
        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 - файл не найден
; ===============================================================
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
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:38, 16-10-2008 | #1000



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[архив - Часть 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




 
Переход