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

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

Закрытая тема
Настройки темы
[архив - Часть 2] AutoIt скрипты

(*.*)


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


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

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


Изменения
Автор: Vadikan
Дата: 27-01-2008
Внимание!
Тема переведена в архивное состояние







(настоятельно рекомендуется к прочтению/поиску)


Руководство к действию по работе c AutoIt.


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

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



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

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

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

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

 

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

Ветеран


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

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


mikola1983,
Цитата mikola1983:
Пасипа ... а есть какой нибуть вообще вариант отчета ....возможно 1 файл в который дабавятся имена ПК или логоны юзеров ...что нибуть такое по чему можно былобы определить кто отказался от установки.?
Попробуй так:
Код: Выделить весь код
$Ask = MsgBox(36, "Вопрос", "хочешь установить?")
If $Ask = 6 Then
    MsgBox(64, "Ответ", "Отлично, устанавливаем!")
    ;тут устанавливаем
Else
    MsgBox(48, "Ответ", "А жаль :(")
    $open = FileOpen("c:\test.txt", 1)
    FileWrite($open, @LogonDomain & " - " & @UserName & @CRLF)
    FileClose($open)
    ;тут отсылаем на email ;)
EndIf

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

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

Отправлено: 12:06, 22-08-2007 | #361



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

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


Аватара для Creat0R

Must AutoIt


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

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


Maza Faka,
Цитата:
Как сделать это-же, только в режиме OnEvent?
Я бы сделал так:

Код: Выделить весь код
#include <GUIConstants.au3>
Opt("GuiOnEventMode", 1)

Global  $iProgr = -1

$gui = GUICreate("My GUI", 300, 200, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "CloseGui")

$Button = GUICtrlCreateButton("Start", 115, 20, 70)
GUICtrlSetOnEvent($Button, "SetProgress")

$Progress = GUICtrlCreateProgress(10, 60, 280, 15)

GUISetState(@SW_SHOW)

While 1
    Sleep(100)
WEnd

Func SetProgress()
    If $iProgr = -1 Then AdlibEnable("SetProgress", 300)
    $iProgr += 10
    If $iProgr > 100 Then $iProgr = 0
    GuiCtrlSetData($Progress, $iProgr)
EndFunc

Func CloseGui()
    Exit
EndFunc
Только зачем пауза именно в 300 мс? таким образом прогресс не очень гладко прогрессирует

amel27,
Цитата:
Не понял... Зачем временный файл? Ключ "/ErrorStdOut" вроде никак не связан с "/AutoIt3ExecuteScript"
Теперь я кажется тоже начинаю не понимать - используя ключ /ErrorStdOut, можно запустить скрипт без вывода всяких сообщении о фатальных ошибках (или просто ошибки о неверном синтаксисе и т.п), но как это использовать в закомпилированном скрипте, при этом не создавая временный файл? (чтобы в него всё прописать и запустить с этим ключом).

Связь у этих ключей тут одна, запуск скрипта в "тихом режиме"

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

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

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

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

Отправлено: 20:15, 22-08-2007 | #362


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

Ветеран


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

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


Creat0R,
Цитата Creat0R:
Я бы сделал так:
Спасибо за наводку! В итоге сделал так:
Код: Выделить весь код
#include <GUIConstants.au3>
Opt("GuiOnEventMode", 1)

Global $iProgress = 0, $i = 0

$gui = GUICreate("My GUI", 300, 200, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "CloseGui")

$Button = GUICtrlCreateButton("Start", 115, 20, 70)
GUICtrlSetOnEvent($Button, "SetProgress")

$Progress = GUICtrlCreateProgress(10, 60, 280, 15)

GUISetState(@SW_SHOW)

While 1
    Sleep(300)
WEnd

Func SetProgress()
    If $iProgress = 0 Then
        $iProgress = 1
        GUICtrlSetData($Button, "Abort")
        AdlibEnable("Test", 300)
    Else
        GUICtrlSetData($Button, "Start")
        $iProgress = 0
        AdlibDisable()
    EndIf
EndFunc

Func CloseGui()
    Exit
EndFunc

Func Test()
    $i += 10
    If $i > 100 Then $i = 0
        GuiCtrlSetData($Progress, $i)
EndFunc

Отправлено: 09:12, 23-08-2007 | #363


Аватара для Creat0R

Must AutoIt


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

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


Maza Faka,
Цитата:
В итоге сделал так
Тогда можно так (без использования функции Test() и AdlibEnable() )...

Код: Выделить весь код
#include <GUIConstants.au3>
Opt("GuiOnEventMode", 1)

Global $iProgress = 0, $i = 0

$gui = GUICreate("My GUI", 300, 200, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "CloseGui")

$Button = GUICtrlCreateButton("Start", 115, 20, 70)
GUICtrlSetOnEvent($Button, "SetProgress")

$Progress = GUICtrlCreateProgress(10, 60, 280, 15)

GUISetState(@SW_SHOW)

While 1
    Sleep(100)
    While $iProgress
        Sleep(30)
        $i += 1
        If $i > 100 Then $i = 0
        GuiCtrlSetData($Progress, $i)
    WEnd
WEnd

Func SetProgress()
    If $iProgress = 0 Then
        $iProgress = 1
        GUICtrlSetData($Button, "Abort")
    Else
        $iProgress = 0
        GUICtrlSetData($Button, "Start")
    EndIf
EndFunc

Func CloseGui()
    Exit
EndFunc
Я так и не понял, зачем ставить паузу в 300 мс и прогресс по 10?

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

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

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:42, 23-08-2007 | #364


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

Ветеран


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

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


Creat0R,
Цитата Creat0R:
Тогда можно так (без использования функции Test() и AdlibEnable()
Да! Сенкс!

Цитата Creat0R:
Я так и не понял, зачем ставить паузу в 300 мс и прогресс по 10?
А как лучше?

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


Отправлено: 13:51, 23-08-2007 | #365


Googler


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

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


Creat0R
Цитата:
как это использовать в закомпилированном скрипте, при этом не создавая временный файл? (чтобы в него всё прописать и запустить с этим ключом).
например так:
Код: Выделить весь код
; Проверка ключей и перезапуск в "тихом" режиме
If Not(StringRegExp($CmdLineRaw,'(?i)^/ErrorStdOut(?:\s|$)')) Then
    $pid = Run (@ScriptFullPath &' /ErrorStdOut '& $CmdLineRaw, @ScriptDir, 0, 2)
    _ScriptWriteLog($pid)
    Exit
EndIf
; Текст скрипта (пример ошибочной команды)
Run('Фигня всякая')
; Сохранение ошибок в лог-файле
Func _ScriptWriteLog($pid)
    Local Const $log = StringTrimRight(@ScriptFullPath,3) &'log'
    Local $text = ''
    FileWrite($log, @YEAR&'/'&@MON&'/'&@MDAY&' '&@HOUR&':'&@MIN&':'&@SEC&@CRLF)
    While 1
        $text = StdoutRead($pid)
        If @error Then ExitLoop
        FileWrite($log, $text)
    Wend
    FileWrite($log, @CRLF)
EndFunc
З.Ы. С одной стороны неудобно, что запускаются два процесса, но с другой - есть возможность перехватывать ошибки средствами того же EXE-файла.

Последний раз редактировалось amel27, 23-08-2007 в 16:02.

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

Отправлено: 14:29, 23-08-2007 | #366

nns nns вне форума

Новый участник


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

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


Здравствуйте всем.
Не подскажете, как с помощью AutoIT'а отловить окно с неизвестным заголовком. Проблема в том, что заголовок частично на другом языке, частично на английском. WinWait() по описанию должен отлавливать по подстроке заголовка (англ части), но в данном случае этого не происходит.
Можно ли как-то отловить окно, не зная заголовка, зная, к пример, что оно запустится через Run("..") ?
Спасибо.

Отправлено: 16:26, 23-08-2007 | #367


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

Ветеран


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

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


nns
При помощи утилиты "AutoIt Window Info" определи класс окна и сопостовляй поиск окна с пользовательским режимом.
Пример на блокноте:
Код: Выделить весь код
Opt("WinTitleMatchMode", 4)
$title = "Classname=Notepad"
Run("notepad.exe")
WinWait($title)
ControlSend($title, "", "Edit1", "Hello World")

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


Отправлено: 17:32, 23-08-2007 | #368


Аватара для Creat0R

Must AutoIt


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

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


Maza Faka,
Цитата:
А как лучше?
Я уже в третьем примере привожу более плавный вариант - паузу ставим примерно в 30, а степень прогресса по единичке (1).

nns,
Цитата:
Можно ли как-то отловить окно, не зная заголовка, зная, к пример, что оно запустится через Run("..") ?
Можно получить PID (идентификатор процесса), и по нему узнать заголовок (вот тут есть для эого функция)... но это проблематично, так как в разных случаях процесс может быть уже запущен, а окно всё ещё не появилось, нужно знать заранее хотябы поведение запускаемого приложения.

amel27,
Цитата:
например так:
Wow! Спасибо большое! я думал что это не прокатит с закомпилированным скриптом ...

Цитата:
С одной стороны неудобно, что запускаются два процесса
Это только если нужно читать ошибки, в противном случае скрипт можно запустить, а родительский процесс сразу же закрывается.. я даже не успеваю разглядеть его в диспетчере задач.

Maza Faka,
Цитата:
Пример на блокноте:
Я пришёл к выводу, что именно для блокнота (хотя и ещё для многих и многих приложении), самый подходящий вариант получить заголовок таков:

Код: Выделить весь код
Opt("WinTitleMatchMode", 2)

$NotepadTitle = WinGetTitle("- Notepad")

MsgBox(64, "", "Title of Notepad is: " & $NotepadTitle)
Получать заголовок по classname не всегда идеальный метод, у меня к примеру стоит всместо стандартного Notepad -> Notepad2, и класс у него естественно другой (Notepad2 ).

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

Код: Выделить весь код
Opt("WinTitleMatchMode", 4)
$NotepadTitle = WinGetTitle("classname+regexp=Notepad[0-9]")

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

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

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


Отправлено: 19:02, 23-08-2007 | #369


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

Ветеран


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

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


Цитата Creat0R:
Получать заголовок по classname не всегда идеальный метод, у меня к примеру стоит всместо стандартного Notepad -> Notepad2, и класс у него естественно другой (Notepad2 ).
Не понял, ты имеешь в виду, что могут быть глюки из-за схожих названий классов? Или что, бы схожие по названию классы классифицировались, как один? Плз обьясни подробней.

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


Отправлено: 19:49, 23-08-2007 | #370



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Открывая 7z архив пишет не удаётся открыть как архив. Можно ли его восстановить? DreDo Хочу все знать 4 01-12-2009 18:54
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:. Vadikan AutoIt 1543 18-01-2009 10:46
[Архив - Часть 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




 
Переход