Имя пользователя:
Пароль:
 | Правила  

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

Ответить
Настройки темы
Зацикливание появление разных окон в скрипте с выполнением команды

Старожил


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

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


Помогите в написании скрипта такого типа :

читать дальше »
Код: Выделить весь код
Example()
Func Example()
WinWait("WinInfo")
Send("^!{h}")
SoundPlay(@WindowsDir & "\media\Windows Exclamation.wav")
WinWaitClose("WinInfo")
Send("^!{h}")
SoundPlay(@WindowsDir & "\media\Windows Notify.wav")
Return Example()


Вообщем суть такова, запустил одну игру, сработало Ctrl+Alt+h, закрыл игру и снова сработало Ctrl+Alt+h.
Запустил другую игру и снова сработали горячие клавиши, так по кругу. Не могу зациклить в скрипте проверку запущенного окна той или иной игры.

Не хотелось бы писать этот код для каждой конкретной игры, так как в автозагрузке придётся держать много запущенных процессов AutoIt-а.

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

Вот тут у меня загвоздка, не знаю как написать такой скрипт в одном файле.

Пожалуйста, нужна помощь.

Отправлено: 03:01, 07-08-2015

 

Старожил


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

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


Вот нашёл такой вариант, может поможет кто нибудь откорректировать или объяснить что там к чему.

Код: Выделить весь код
Global $all_windows[4] = [3, 'title 1', 'title 2', 'title 3'] ; (3) -количество окон, title 1 - Названия окон
Global $close_windows[4] = ["", 0, 0, 0] ;массив на количество окон
Global $time = 5


While 1

    For $i = 1 to $all_windows[0]
        $Handle = WinGetHandle($all_windows[$i])
        $Exist = WinExists($Handle)

        If $Exist = 1 And $close_windows[$i] = 0 Then
            $hWnd = WinWait($Handle, '', $time)
            If Not $hWnd Then MsgBox(64, 'Ошибка', 'В указонный промежуток времени окно найдено небыло.')

            Send('^!{h}')
            $close_windows[$i] = 1
        ElseIf $Exist = 0 And $close_windows[$i] = 1 Then
            Send('^!{h}')
            $close_windows[$i] = 0
        EndIf
    Next
WEnd
Здесь при запуске скрипта сразу же срабатывают горячие клавиши. Пробовал так же и без $time, удаляя переменную.
Где там ошибка ?

Последний раз редактировалось nibble74, 21-09-2015 в 12:21. Причина: Исправил код


Отправлено: 08:53, 21-09-2015 | #2



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

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


Старожил


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

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


Неужели никто помочь не может ?

Отправлено: 16:42, 23-09-2015 | #3


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


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

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


Попробовал запустить скрипт (только чуток переделал) - у меня срабатывает нормально. При запуске, если окна не открыты - не срабатывают горячие клавиши.
Код: Выделить весь код
Global $all_windows[3] = [ 'title1', 'title 2', 'title 3'] ;  title  - Названия окон
Global $close_windows[3] = [ 0, 0, 0] ;массив на количество окон



While 1

    For $i = 0 to UBound( $all_windows)-1
        $Handle = WinGetHandle($all_windows[$i])
        $Exist = WinExists($Handle)

        If $Exist = 1 And $close_windows[$i] = 0 Then

            Send('^!{h}')
            $close_windows[$i] = 1
        ElseIf $Exist = 0 And $close_windows[$i] = 1 Then
			
            Send('^!{h}')
            $close_windows[$i] = 0
        EndIf
    Next
WEnd
Не понятно - зачем Вы вставили в массив количество элементов, если всегда можно узнать функцией "Ubound"? Но массив у вас статический, даже и без этого кол-во элементов известно. Так-же не пойму, зачем ждать появления окна, если ранее получили его дескриптор и даже проверили, что оно уже существует ?

Последний раз редактировалось ra4o, 24-09-2015 в 22:39.

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

Отправлено: 22:10, 24-09-2015 | #4


Старожил


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

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


Так я не силён в написании скриптов, поэтому и просил помощи.
К сожалению, при запуске скрипта повышается нагрузка на процессор, до 50% грузится, что не есть гуд.
Как так, что может так нагружать ?

Подсказали ещё с одним вариантом, но не пойму как вписывать названия окон.

Код: Выделить весь код
Global $all_windows

While 1
    $all_windows = WinList()

    For $i = 1 to $all_windows[0][0]

        If WinActive($all_windows[$i][1]) Then
            $iState = WinGetState("[ACTIVE]", "")

            If BitAND($iState, 32) Then
                Send("^!{h}")
                SoundPlay(@WindowsDir & "\media\Windows Exclamation.wav")

                Do
                    Sleep(100)
                Until WinWaitClose($all_windows[$i][1])
                Send("^!{h}")
                SoundPlay(@WindowsDir & "\media\Windows Notify.wav")
            EndIf
        EndIf
    Next
WEnd

Отправлено: 00:11, 25-09-2015 | #5


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


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

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


В этом варианте функция
Код: Выделить весь код
WinList
возвращает список всех открытых окон и потом в цикле их перебирает, ждёт активации окна и дальше нажимает ваши горячие клавиши и пиликает что-то, затем скрипт зацикливается до тех пор, пока окно не закроется, дальше опять горячие клавиши и пиликание и так по кругу.
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:32, 25-09-2015 | #6



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Появление дополнительных (рекламных) окон при переходе по ссылке Макушкины_ушки Лечение систем от вредоносных программ 8 16-09-2013 17:08
VBS/WSH/JS - [решено] Как в VBS скрипте указать заголовок окон (MsgBox, InputBox)? Ragnazar Скриптовые языки администрирования Windows 1 18-07-2012 21:19
Ожидание разных названий Окон, WinWaitActive He4To AutoIt 7 17-09-2010 14:23
Как отследить появление сообщения в разных ОС Str_ani_ck AutoIt 10 27-07-2009 18:39
разный результат команды "browstat status" на разных компьютерах RSM2 Сетевые технологии 2 25-04-2006 09:44




 
Переход