Что нового

Окна, Диалоги Как достоверно определить, что активное окно "развисло" (стало активным, доступным)

fduch

Новичок
Сообщения
2
Репутация
0
Здравствуйте.
Есть такая задача.
1. Список заказов копирую из Excel в буфер обмена и сохраняю в массив.
2. Через цикл пробегаю по массиву и ищу заказы в ERP системе с целью их последовательного удаления.
3. В момент удаления окно зависает на некоторое время - и это время варьируется от одной до 20 секунд.
4. Чтобы вставить другой номер из массива нужно четко определить, что окно развисло. Ждать по 20 секунд не вариант.
Подскажите приём, как четко определить доступность окна для следующей итерации?

Пытался отследить курсор, "While MouseGetCursor = 14", но он не всегда меняется с четкой закономерностью.
Вроде как можно отслеживать кусочек экрана как "картинку".
Подскажите - как это сделать. Или может есть более элегантный способ.

Спасибо заранее!
 

Oki

Осваивающий
Сообщения
288
Репутация
36
Если не найдётся более прямой способ, то можно попробовать такую последовательность действий, предварительно сохранив текст в переменную: скопировать в буфер обмена, попытаться вставить в окно, очистить буфер обмена, попытаться прочесть из окна в буфер обмена, сравнить с сохранённым в переменной. Повторять в цикле до успеха, после которого запускать в работу. С поиском нужных цветов пикселей на экране, конечно, можно играться, но подобрать удачный критерий для алгоритма может оказаться трудно.
 

InnI

AutoIT Гуру
Сообщения
4,784
Репутация
1,377
Пытаюсь сделать вот так
Похоже, эта функция срабатывает когда окно уже какое-то время не отвечает. Попробуйте добавить Sleep на пару-тройку секунд перед циклом.
Вот ещё вариант проверки
Код:
#include <WinAPISysWin.au3>

$Sec = 20
$hWnd = WinGetHandle("Title")
For $i = 1 To $Sec
  If _WinAPI_SendMessageTimeout($hWnd, 0) <> -1 And Not @extended Then ExitLoop
Next
If $i > $Sec Then ConsoleWrite("Timeout" & @CRLF)
 

Oki

Осваивающий
Сообщения
288
Репутация
36
Похоже, эта функция срабатывает когда окно уже какое-то время не отвечает. Попробуйте добавить Sleep на пару-тройку секунд перед циклом.
Из справки следует, что только после 5 секунд начинает срабатывать.
 
Верх