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

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

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

(*.*)


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


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

Профиль | Сайт | Отправить 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 | Цитировать


spooll
У тебя ошибка в синтаксисе функции "$ret=WinWaitActive("Создание нового каталога", 20)"
Цитата:
Если нужно указать опциональный параметр, то все его предшественники должны быть тоже указаны!
Код: Выделить весь код
WinWaitActive("Создание нового каталога", "", 20)
Не проще ли проверять так:
Код: Выделить весь код
If WinWaitActive("Создание нового каталога", "", 20) Then
    Send("{ENTER}")
Else
    BlockInput(0)
    Return
EndIf

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


Последний раз редактировалось Maza Faka, 08-08-2007 в 16:46. Причина: Дополнение


Отправлено: 16:41, 08-08-2007 | #261



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

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


Аватара для spooll

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


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

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


Maza Faka,
лично у меня не пашет вот эта строка
PHP код: Выделить весь код

$ret=WinWaitActive("Выбор программной группы""&Папки с Программами:"10)

    If 
$ret Then
        Send
("{ENTER}")
    Else
        
BlockInput(0)
        Return ; 
Выход из функции
    
EndIf 

Цитата Maza Faka:
If WinWaitActive("Создание нового каталога", "", 20) Then Send("{ENTER}") Else
всеравно не работает, окно просто "зависает".

Отправлено: 17:30, 08-08-2007 | #262


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


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

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


spooll
Цитата:
всеравно не работает, окно просто "зависает".
Возможно, Send("{ENTER}") попадает не по "адресу"...
Лично я бы использовал только WinWait() и ControlClick(). Во-первых, при этом отпадает необходимость в BlockInput(), во-вторых, ControlClick() обращается непосредственно к элементу(кнопке), поэтому вероятность ошибки здесь минимальна.

Отправлено: 23:06, 08-08-2007 | #263


Аватара для Creat0R

Must AutoIt


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

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


amel27
Цитата:
достаточно вернуть версию "comctl32.dll"
Т.е вот так?:

Код: Выделить весь код
Round(FileGetVersion(@SystemDir & "\system32\comctl32.dll"), 1)
Цитата:
- есть возможность фильтрации отображаемых элементов
Т.е можно будет к примеру задавать отображение содержимого одного конкретного каталога (с определёнными именами папок/файлов) ? это было бы вообще супер!

Цитата:
т.к. нужно создавать свой COM-объект
ptrex (тоже один из "великих умов" оф форума ) вроде на эту тему что то делал тут, утверждает что можно всё же собственные обьекты создавать на Аутоите.

Цитата:
интересно, зачем?
Нужно для изменения формата в диалоге сохранения страницы браузера (Opera), т.е окно естественно не аутоитовское .
Цитата:
логично предположить, что в comdlg32.dll
А как с него вытянуть это?

Я пока остановился на таком решении:

Код: Выделить весь код
Opt("WinTitleMatchMode", 4)
$Title = WinGetTitle("classname=#32770", "FolderView")
Можешь плиз потвердить, возвращает ли оно у тебя правильный заголовок с окна сохранения (любой программы)?

spooll,
Во-первых для ручного отключения BlockInput() не нужно жать ресет, нужно вызвать сочетания клавиш Ctrl Alt Del

Во-вторых, зачем тебе постоянно ждать активность окна? можно просто ждать появление окна (WinWait()).

Цитата:
Везде поставил время WinWaitActive 20, но всеравно виснет
Потому что окно не активируется....

Вот пример как ты можешь это сделать:

Код: Выделить весь код
;Предотвращаем вылет скрипта в случае не удачного запуска программ
Opt("RunErrorsFatal", 0)

If FileExists("C:\Program Files\1Cv77\BIN\1CV7s.exe") Then Exit

BlockInput(1)

Run("\\192.168.11.198\Distrib\1s_install\B770023\Disk1\setup.exe")
If @error Then Quit()

WinWait("Добро пожаловать", "Добро пожаловать в программу установки", 20)
ControlClick("Добро пожаловать", "Добро пожаловать в программу установки", "Button")

WinWait("Выбор варианта установки", "Выберите вариант установки программы", 20)
ControlClick("Выбор варианта установки", "Выберите вариант установки программы", "Button")

WinWait("Информация о пользователе", "Введите Ваше имя и название", 20)
ControlClick("Информация о пользователе", "Введите Ваше имя и название", "Button")

WinWait("Информация о пользователе", "Вы сообщили следующую информацию", 20)
ControlClick("Информация о пользователе", "Вы сообщили следующую информацию", "Button")

WinWait("Выбор каталога для установки", "Программа установки поместит 1С", 20)
ControlClick("Выбор каталога для установки", "Программа установки поместит 1С", "Button")

WinWait("Создание нового каталога", "", 20)
ControlClick("Создание нового каталога", "", "Button")

WinWait("Выбор программной группы", "Выберите из существующих или", 20)
ControlClick("Выбор программной группы", "", "Button")

WinWait("Установка 1С:Предприятия", "Программа установки скопировала файлы", 20)
ControlClick("Установка 1С:Предприятия", "Программа установки скопировала файлы", "Button")

WinWait("Установка 1С:Предприятия", "Установка программы 1С", 20)
ControlClick("Установка 1С:Предприятия", "Установка программы 1С", "Button")

Run("\\192.168.11.198\Distrib\1s_install\B770025\Disk1\setup.exe")
If @error Then Quit()

WinWait("Добро пожаловать", "Добро пожаловать в программу установки", 20)
ControlClick("Добро пожаловать", "Добро пожаловать в программу установки", "Button")

WinWait("Список установленных программ", "Из списка найденных на данном компьютере", 20)
ControlClick("Список установленных программ", "Из списка найденных на данном компьютере", "Button")

WinWait("Обновление 1С:Предприятия", "При работе с сетевыми версиями", 20)
ControlClick("Обновление 1С:Предприятия", "При работе с сетевыми версиями", "Button")

WinWait("Обновление 1С:Предприятия", "Обновление программы 1С", 20)
ControlClick("Обновление 1С:Предприятия", "Обновление программы 1С", "Button")

Run("\\192.168.11.198\Distrib\1s_install\B770025\1C_patch_7725\1Cv77SQL_025_Patch.exe")
If @error Then Quit()

WinWait("Патч 1С:Предприятие 7.7.025", "Вы запустили программу", 20)
ControlClick("Патч 1С:Предприятие 7.7.025", "Вы запустили программу", "Button1")

WinWait("PatchWise Updater", "", 20)
ControlClick("PatchWise Updater", "", "Button")

ControlClick("Патч 1С:Предприятие 7.7.025", "Вы запустили программу", "Button2")

Quit()

Func Quit()
    BlockInput(0)
    Exit
EndFunc


Везде где в функции ControlClick встречается "Button", замени на настоящее имя контроля (используя утилиту Au3Info.exe).

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

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

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

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

Отправлено: 23:10, 08-08-2007 | #264


Аватара для Creat0R

Must AutoIt


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

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


Maza Faka,
Цитата:
если прописаны пути к mp3-файлам которые находятся в другом каталоге, то не проигрываются, как я понял, игнорируются пути, почему?
Пути не игнорируются...

Дело в том, что многие плейлисты содержат пути относительно корню диска, т.е типа такого:

\My Music\Vechnoya Moladast.mp3

Если скрипт лежит к примеру в папке C:\test, и файл находится по этому пути: C:\My Music\Vechnoya Moladast.mp3, то считав тот относительный путь файл будет проирываться.

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

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

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

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


Отправлено: 23:27, 08-08-2007 | #265


Аватара для Creat0R

Must AutoIt


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

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


VelDmi,
Цитата:
при любом шевелении мышкой или клавиатурой монитор включается!
Можно попробовать это обойти проверокой на ввод пользователя:

Код: Выделить весь код
#NoTrayIcon

Opt("WinTitleMatchMode", 4)

Global $MonitorIsOff = False

HotKeySet("{F11}", "Monitor_Off")
HotKeySet("{F10}", "Monitor_On")
HotKeySet("{Esc}", "Quit")

While 1
    Sleep(10)
WEnd

Func Quit()
    Monitor_On()
    Exit
EndFunc

Func Monitor_On()
    Local $hwnd = WinGetHandle('classname=Progman')
    DllCall('user32.dll', 'int', 'SendMessage', 'hwnd', $hwnd, 'int', 274, 'int', 61808, 'int', -1)
    $MonitorIsOff = False
EndFunc

Func Monitor_Off()
    $MonitorIsOff = True
    Local $hwnd = WinGetHandle('classname=Progman')

        While $MonitorIsOff = True
        DllCall('user32.dll', 'int', 'SendMessage', 'hwnd', $hwnd, 'int', 274, 'int', 61808, 'int', 2)
        Sleep(10)
        _IdleWaitCommit(0)
    WEnd
EndFunc

Func _IdleWaitCommit($idlesec)
    Local $iSave, $LastInputInfo = DllStructCreate ("uint;dword")
    DllStructSetData ($LastInputInfo, 1, DllStructGetSize ($LastInputInfo))
    DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo))
    Do
        $iSave = DllStructGetData ($LastInputInfo, 2)
        Sleep(100)
        DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo))
    Until (DllStructGetData ($LastInputInfo, 2)-$iSave) > $idlesec Or $MonitorIsOff = False
    Return DllStructGetData ($LastInputInfo, 2)-$iSave
EndFunc
Просто по запуску скрипта нажми F11, монитор выключится, при каждом вводе (м клавиатуры или мышки) монитор будет отключаться по новой, для включения монитора нужно нажать F10, для полного выхода со скрипта ESC.
При этом любые сочетания клавиш действуют как обычно.

Это конечно не то что требуется, наверняка(?) можно полностью выключить монитор, но это тоже решение

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

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

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


Отправлено: 23:59, 08-08-2007 | #266


Аватара для Creat0R

Must AutoIt


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

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


Накалякал тут функцию для конвертирования даты и времени в настойщий фрмат, но может это возможно сделать более укророченным путём?, а главное, чтобвы срабатывало быстрее:

Код: Выделить весь код
$FullDateTime = _DateTimeConvertFormat("DD/MM/YYYY, HH:MM:SS")
MsgBox(64, "Date/Time Convert Results", $FullDateTime)

Func _DateTimeConvertFormat($sFormat)
    Local $RetDateTime
    Local $Year_Raw = @YEAR
    Local $Year_Part = StringRight($Year_Raw, 2)

        Local $Mounth_Raw = @MON
    Local $Mounth_Part = StringRight($Mounth_Raw, 1)
    If $Mounth_Raw > 9 Then $Mounth_Part = $Mounth_Raw

        Local $Day_Raw = @MDAY
    Local $Day_Part = StringRight($Day_Raw, 1)
    If $Day_Raw > 9 Then $Day_Part = $Day_Raw

        Local $Hours_Raw = @HOUR
    Local $Hours_Part = StringRight($Hours_Raw, 1)
    If $Hours_Raw > 9 Then $Hours_Part = $Hours_Raw

        Local $Minutes_Raw = @MIN
    Local $Minutes_Part = StringRight($Minutes_Raw, 1)
    If $Minutes_Raw > 9 Then $Minutes_Part = $Minutes_Raw

        Local $Seconds_Raw = @SEC
    Local $Seconds_Part = StringRight($Seconds_Raw, 1)
    If $Seconds_Raw > 9 Then $Seconds_Part = $Seconds_Raw

            $RetDateTime = StringReplace($sFormat, "yyyy", $Year_Raw)
    $RetDateTime = StringRegExpReplace($RetDateTime, "(?i)y+", $Year_Part)

        $RetDateTime = StringReplace($RetDateTime, "mm", $Mounth_Raw)
    $RetDateTime = StringReplace($RetDateTime, "m", $Mounth_Part)

        $RetDateTime = StringReplace($RetDateTime, "dd", $Day_Raw)
    $RetDateTime = StringReplace($RetDateTime, "d", $Day_Part)

            $RetDateTime = StringReplace($RetDateTime, "hh", $Hours_Raw)
    $RetDateTime = StringReplace($RetDateTime, "h", $Hours_Part)

        $RetDateTime = StringReplace($RetDateTime, "mm", $Minutes_Raw)
    $RetDateTime = StringReplace($RetDateTime, "m", $Minutes_Part)

        $RetDateTime = StringReplace($RetDateTime, "ss", $Seconds_Raw)
    $RetDateTime = StringReplace($RetDateTime, "s", $Seconds_Part)

        Return $RetDateTime
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


Отправлено: 04:57, 09-08-2007 | #267


Googler


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

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


VelDmi
Цитата:
Хочется управлять винампом горячими клавишами клавиатуры не включая монитор
немного погуглив сделал вывод, что для блокировки включения монитора без вызовов недокументированных функций ядра не обойтись.... Впрочем, если в монитор встроена защита от дурака (щас вроде все такие) аналогичного эффекта можно добиться переводом его в нестандартный режим (по частоте или по разрешению) - это можно сделать AutoIT-ом.


Creat0R
Цитата:
Т.е вот так?
угу, только "system32" лишний
Цитата:
ptrex (тоже один из "великих умов" оф форума ) вроде на эту тему что то делал тут, утверждает что можно всё же собственные обьекты создавать на Аутоите
дык енто как раз WSH-метод, как минимум потребуется дополнительный WSF-файл, описывающий объект, а кстати - как ты предполагаешь настраивать фильтр - через RegExp-выражение?... ведь прежде чем ваять компоненту нужно утвердить интерфейс
Цитата:
Можешь плиз потвердить, возвращает ли оно у тебя правильный заголовок с окна сохранения (любой программы)?
твой вариант работает лучше чем импорт системного заголовка, так как приложение может его подменять - к примеру SciTE имеет "Save As" даже на русской Windows... хотя насчет "любой программы" ты загнул - MS Office на этот случай имеет свои окна.
Цитата:
Накалякал тут функцию для конвертирования даты и времени в настойщий фрмат
у тебя в скрипте ошибка - минуты и месяцы имеют одинаковое обозначение, соответственно вместо минут пробивается месяц, имхо выхода два: либо делать отдельные функции для даты и времени, либо вводить свою кодировку.

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


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


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


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

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


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

Отправлено: 08:52, 09-08-2007 | #269


Аватара для Creat0R

Must AutoIt


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

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


amel27,
Цитата:
только "system32" лишний
Упс... забыл что @SystemDir это и есть C:\Windows\System32

Цитата:
как ты предполагаешь настраивать фильтр - через RegExp-выражение?
Без понятия если честно, я просто от восторга данной возможности вообразил приимущества

Цитата:
к примеру SciTE имеет "Save As"
он имеет “Save file”

Цитата:
хотя насчет "любой программы" ты загнул - MS Office на этот случай имеет свои окна
И вправду, но для этого случая можно использовать такой метод:

Код: Выделить весь код
Opt("WinTitleMatchMode", 4)
$Title = WinGetTitle("classname=#32770", "FolderView")
If $Title = 0 Then $Title = WinGetTitle("classname=bosa_sdm_Microsoft Office Word 11.0", "FolderView")

ConsoleWrite($Title)
Вот жалко что нельзя(?) совмещать classname с regexp, типа такого:

Код: Выделить весь код
Opt("WinTitleMatchMode", 4)
$Title = WinGetTitle("classname+regexp=bosa_sdm(.*)", "FolderView")
Просто не во всех приложениях офиса одинаковые класы, в Word к примеру bosa_sdm_Microsoft Office Word 11.0, но почти во всех есть это: bosa_sdm - тогда можно было бы просто по RegExp подобрать класс.... нужно бы запостить в Feature Request на оф. форум .

Цитата:
у тебя в скрипте ошибка - минуты и месяцы имеют одинаковое обозначение
Точно, увлёкся... Спасибо.

Цитата:
имхо выхода два: либо делать отдельные функции для даты и времени, либо вводить свою кодировку.
Свою кодировку? это как?

А по поводу двух функции, не обязательно:

Код: Выделить весь код
$RetDateTime = StringReplace($RetDateTime, "mm", $Mounth_Raw, 1)
;$RetDateTime = StringReplace($RetDateTime, "m", $Mounth_Part)
Правда в этом случае формат месяца может быть передан только как MM.

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

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

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


Отправлено: 09:05, 09-08-2007 | #270



Компьютерный форум 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




 
Переход