Что нового

использовать "winwait" с "or"

Пост номер 5 был отмечен как лучший ответ.

zbz

Новичок
Сообщения
70
Репутация
1
Здраствуйте, помогите осуществить эту идею (чё та так, не работает), при любом (из трёх) совпадении пошло дальше. Спасибо
Код:
If  winwait("WindowName", "WindowText-1",33) Or winwait("WindowName", "WindowText-2",33) Or winwait("WindowName", "WindowText-3",33)   Then
Else
EndIf
 
Последнее редактирование:
Автор
Z

zbz

Новичок
Сообщения
70
Репутация
1
в зависимости от времени меняется текст в окне (вариантов всего 3). Щас, например
Код:
winwait ("WindowName", "WindowText-2",33)
и скрипт продолжается только по тайм ауту, а если его поставить самым первым, то есть так
Код:
If winwait ("WindowName", "WindowText-2",33) Or WinWait("WindowName", "WindowText-1",33) Or winwait("WindowName", "WindowText-3",33)

то скрипт продолжается по обнаружению, а не по тайм ауту (Щас ещё раз проверил и убедился).
 
Последнее редактирование модератором:

joiner

Модератор
Локальный модератор
Сообщения
3 050
Репутация
511
Код:
Local $hHandle = WinWait('WindowName')
Switch StringStripWS(WinGetText($hHandle), 3)
    Case 'Text 1'
        ;действие
    Case 'Text 2'
        ;действие
    Case Else
        ;действие
EndSwitch
 
  • Like
Реакции: zbz

InnI

AutoIT Гуру
Сообщения
4 247
Репутация
1 128
Код:
; вариант 1
$t = TimerInit()
While Sleep(111)
  If WinWait("WindowName", "WindowText-1", 1) _
  Or WinWait("WindowName", "WindowText-2", 1) _
  Or WinWait("WindowName", "WindowText-3", 1) _
  Or TimerDiff($t) > 33333 Then ExitLoop
WEnd

; вариант 2
$hWnd = WinWait("WindowName")
$t = TimerInit()
While Sleep(111)
  $Text = WinGetText($hWnd)
  If StringInStr($Text, "WindowText-1") _
  Or StringInStr($Text, "WindowText-2") _
  Or StringInStr($Text, "WindowText-3") _
  Or TimerDiff($t) > 33333 Then ExitLoop
WEnd
 
  • Like
Реакции: zbz
Автор
Z

zbz

Новичок
Сообщения
70
Репутация
1
Код:
Local $hHandle = WinWait('WindowName')
Switch StringStripWS(WinGetText($hHandle), 3)
    Case 'Text 1'
        ;действие
    Case 'Text 2'
        ;действие
    Case Else
        ;действие
EndSwitch
Предпочтительный скрипт, но почему то, в любом раскладе "Case", срабатывает " Else" , или так и должно быть?
 

joiner

Модератор
Локальный модератор
Сообщения
3 050
Репутация
511
смотря какой текст. я проверял на программе autoit с текстом в основном окне.
запиши второй строчкой в коде
Код:
MsgBox(64, '', WinGetText($hHandle))

считывается ли текст
 
Последнее редактирование:

IMStrelcov

CTPEJIbLLOB
Сообщения
97
Репутация
12
Код:
;заголовок окно | текст1 | текст2 | текст3 и т.д.
$sList = 'WindowName|WindowText-1|WindowText-2|WindowText-3'
;делитель строк в $sList
$sSplit = '|'
;время ожидания в сек.
$iTime = 60
;1 = существует, 2 = отображается, 4 = доступно, 8 = активно, 16 = свёрнуто, 32 = развёрнуто .
;(можно суммировать например: 1+2 = существует и отображается)
$iFlag = 1

;ожидает появления окна с указанными параметрами
;если удача возратит текст с которым найдено окно
;если не удача вернет ноль
$sResult = WinWait_($sList, $sSplit, $iTime, $iFlag)

If $sResult Then
    MsgBox(0,'','Окно "WindowName" найдено')
Else
    MsgBox(0,'','Окно "WindowName" не найдено')
EndIf

Switch $sResult
    Case 'WindowText-1'
        MsgBox(0,'','Найдено окно "WindowName" с текстом "WindowText-1"')
    Case 'WindowText-2'
        MsgBox(0,'','Найдено окно "WindowName" с текстом "WindowText-2"')
    Case 'WindowText-3'
        MsgBox(0,'','Найдено окно "WindowName" с текстом "WindowText-3"')
    Case Else
        MsgBox(0,'','Окно "WindowName" не найдено')
EndSwitch

Func WinWait_($_sList, $_sSplit = '|', $_iFlag = 1, $_iTime = 1)
    $_sList = StringSplit ($_sList, $_sSplit, 2)
    If $_sList[0] < 2 Then Return SetError(1, 0, 0)
    $_iTime *= 1000
    Local $_hTimer = TimerInit()
    Local $_iA, $_iState
    While Sleep(100)
        For $_iA = 2 To $_sList[0]
            $_iState = WinGetState($_sList[1], $_sList[$_iA])
            $_iState = BitAND($_iState, $_iFlag)
            If $_iState = $_iFlag Then Return $_sList[$_iA]
        Next
        If TimerDiff($_hTimer) >= $_iTime Then Return 0
    WEnd
EndFunc
 
Автор
Z

zbz

Новичок
Сообщения
70
Репутация
1
смотря какой текст. я проверял на программе autoit с текстом в основном окне.
запиши второй строчкой в коде
Код:
MsgBox(64, '', WinGetText($hHandle))

считывается ли текст
Да считывается. Кстати, текст появляется через 10-15 секунд после появления окна (прога запускается, проверяет интернет и потом, отображает нужный мне текст)
Сообщение автоматически объединено:

Спасибо всем, остановился на варианте 2 от InnI
 
Последнее редактирование:

joiner

Модератор
Локальный модератор
Сообщения
3 050
Репутация
511
в таком случае цикл как раз самое то. А какие операторы использовать это уже дело "вкуса" ))
 
  • Like
Реакции: zbz
Верх