Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Как отследить появление сообщения в разных ОС (http://forum.oszone.net/showthread.php?t=146294)

Str_ani_ck 26-07-2009 19:19 1178269

Как отследить появление сообщения в разных ОС
 
У меня при установке программы на висте выскакивает сообщение о несовместимости данной программы с вистой, а на хр нет . А в скрипте я уже прописал

1 WinWaitActive("Не совместимость программы")
2 Send("{TAB 4}")
3 Sleep ( 200)
4 Send("{SPACE}")
5 Sleep ( 200)
6 Send("{TAB}")
7 Sleep ( 200)
8 Send("{RIGHT}")
9 Sleep ( 200)
10 Send("{ENTER}")
11 WinWaitActive("Ошибка лицензии AutoCAD 2007")


А вот как мне быть если на хр этого окна нет, а скрипт затормозился на этой строчке WinWaitActive("Не совместимость программы") , а мне нужно чтобы он перешел к строке WinWaitActive("Ошибка лицензии AutoCAD 2007") , если данного окна нет???

Creat0R 26-07-2009 19:38 1178282

Цитата:

Цитата Str_ani_ck
как мне быть если на хр этого окна нет, а скрипт затормозился на этой строчке WinWaitActive("Не совместимость программы") »

Тут нужно либо ожидать другое окно, которое появляется/активируется далее (вне зависимости от того, есть ли сообщение несовместимости или нету), либо ожидать это окно но определённое время, ну или вообще в цикле всё это проверять...

Последний вариант:

Код:

While 1
    If WinExists("Не совместимость программы") Then
        Send("{TAB 4}")
        Sleep(200)
        Send("{SPACE}")
        Sleep(200)
        Send("{TAB}")
        Sleep(200)
        Send("{RIGHT}")
        Sleep(200)
        Send("{ENTER}")

        ExitLoop
    EndIf

    If
WinExists("Ошибка лицензии AutoCAD 2007") Then ExitLoop
WEnd


WinWaitActive("Ошибка лицензии AutoCAD 2007")


beve 26-07-2009 19:41 1178288

Можеш сделать ожидание в цикле появления или того или другого окна, и при появлении - выход из цикла и дальше по коду.

Creat0R 26-07-2009 20:09 1178317

Ах да, совсем упустил из виду - название темы неудачное! Это форум по AutoIt, поэтому оно и так должно быть понятным, что нужна помощь по AutoIt.

SyDr 26-07-2009 20:12 1178323

Ээээ.... А не проще проверить на какой системе, XP или Vista выполняется скрипт?
Смотрите макрос @OSVersion

Str_ani_ck 26-07-2009 22:11 1178420

Цитата:

Цитата Creat0R
While 1
If WinExists("Не совместимость программы") Then
Send("{TAB 4}")
Sleep(200)
Send("{SPACE}")
Sleep(200)
Send("{TAB}")
Sleep(200)
Send("{RIGHT}")
Sleep(200)
Send("{ENTER}")
ExitLoop
EndIf
If WinExists("Ошибка лицензии AutoCAD 2007") Then ExitLoop
WEnd
WinWaitActive("Ошибка лицензии AutoCAD 2007") »



Вставил это вместо своего куска скрипта , и скрипт тормозит на If WinExists("Не совместимость программы") Then

266903582 26-07-2009 23:24 1178479

Str_ani_ck, попробуй так:
Код:

While 1
If WinExists("Не совместимость программы") Then f1()
If WinExists("Ошибка лицензии AutoCAD 2007") Then ExitLoop
WEnd
Winwait("Ошибка лицензии AutoCAD 2007")
WinActivate("Ошибка лицензии AutoCAD 2007")
;~ Дальше свое код

Func f1()
        WinActivate("Не совместимость программы")
        Send("{TAB 4}")
        Sleep(200)
        Send("{SPACE}")
        Sleep(200)
        Send("{TAB}")
        Sleep(200)
        Send("{RIGHT}")
        Sleep(200)
        Send("{ENTER}")
EndFunc

Хотя вместо send-ов надежнее будет controlsend использовать, но это уже на твое усмотрение...

SyDr 26-07-2009 23:40 1178487

Код:

If @OSVersion = "WIN_VISTA" Then
        WinWaitActive("Не совместимость программы")
        Send("{TAB 4}")
        Sleep ( 200)
        Send("{SPACE}")
        Sleep ( 200)
        Send("{TAB}")
        Sleep ( 200)
        Send("{RIGHT}")
        Sleep ( 200)
        Send("{ENTER}")
EndIf
WinWaitActive("Ошибка лицензии AutoCAD 2007")


Str_ani_ck 27-07-2009 02:06 1178573

While 0- Вот так скрипт идет дальше а с 1 стоит на месте???? Не понимаю что нужно

Цитата:

Цитата 266903582
While 0
If WinExists("Не совместимость программы") Then f1()
If WinExists("Ошибка лицензии AutoCAD 2007") Then ExitLoop
WEnd
Winwait("Ошибка лицензии AutoCAD 2007")
WinActivate("Ошибка лицензии AutoCAD 2007")
;~ Дальше свое код
Func f1()
WinActivate("Не совместимость программы")
Send("{TAB 4}")
Sleep(200)
Send("{SPACE}")
Sleep(200)
Send("{TAB}")
Sleep(200)
Send("{RIGHT}")
Sleep(200)
Send("{ENTER}")
EndFunc »


Str_ani_ck 27-07-2009 02:23 1178576

Хотя вместо send-ов надежнее будет controlsend использовать, но это уже на твое усмотрение...
Акак этим пользоваться
Допустим мне нужно нажать кнопку TAB
Я набираю команду Send("{TAB }")
А этим как пользоваться controlsend?

266903582 27-07-2009 18:39 1179187

ControlSend ( "title", "text", controlID, "string" [, flag] )
ControlSend работает точно также, как Send за исключением того, что нажатия высылаются непосредственно в окно/управляющий элемент, а не только для активного окна.
Подробности в справке.


Время: 03:31.

Время: 03:31.
© OSzone.net 2001-