Что нового

Как отловить неактивное окно при блокировке сеанса windows

MASTER

Новичок
Сообщения
1
Репутация
0
Есть в сети сетевой сканер, к нему идет пользовательская программа (эпсон скан), ребята из эпсона сделали её так что бы окно при неиспользовании закрывалось, другого софта не предлагают, в корп среде остается два варианта либо ставить данный софт всем и наблюдать классовую борьбу за сканер, или поставить в одном месте и контролировать её работу. На последнем варианте остановились, написал скрипт, но не смог отловить окно при блокировке сеанса (каждые 10 минут простоя - сеанс пользователя на сервере блокируется.)
Код скрипта:
Код:
#RequireAdmin
If WinExists(@ScriptName) Then Exit
AutoItWinSetTitle(@ScriptName)
Opt("WinTitleMatchMode", 4)
Global $escann = "escndv.exe",$scanp = "C:\Windows\twain_32\escndv\escndv.exe"

While True
    If ProcessExists($escann) Then ;Проверка запущено ли приложение
            ProcessClose ($escann) ;Да - закрыть, продолжить
            Sleep(100)
    EndIf ;Нет - продолжить
    Ping("192.168.2.23",250) ;Пинг доступности сканера, хост 192.168.2.23
        While @error <> 0 ;Цикл пинга хоста до доступности
            Sleep (35000) ;Пауза
            Ping ("192.168.2.23",250) ;Пинг доступности сканера, хост 192.168.2.23
        WEnd
    Run($scanp) ;Запуск приложения
    Sleep (35000) ;Пауза
    Ping("192.168.2.23",250) ;Пинг доступности сканера, хост 192.168.2.23
        While @error = 0 ;Цикл пинга хоста до недоступности
            Sleep (35000) ;Пауза
                If Not WinActive('[TITLE:EPSON Scan; CLASS:#32770;]', "Время вышло.") Then WinActivate('[TITLE:EPSON Scan; CLASS:#32770;]', "Время вышло.")
                If WinActive ('[TITLE:EPSON Scan; CLASS:#32770;]', "Время вышло.") Then
                    Send("{ENTER}")
                    Sleep (5000)
                    Run($scanp) ;Запуск приложения
                EndIf
            Ping ("192.168.2.23",250) ;Пинг доступности сканера, хост 192.168.2.23
        WEnd ; выход из цикла если сканер недоступен
WEnd ;Возврат в начало цикла

Задача осложняется тем что Autoit Windows Info показал одинаковые идентификаторы у главного окна и предупреждения о закрытии программы (которое надо отловить и закрыть).
Главное окно (эпсон скан)
>>>> Window <<<<
Title: EPSON Scan
Class: #32770
Position: 584, 6
Size: 399, 561
Style: 0x94CA00C4
ExStyle: 0x00010101
Handle: 0x0000000000130228

>>>> Control <<<<
Class:
Instance:
ClassnameNN:
Name:
Advanced (Class):
ID:
Text:
Position:
Size:
ControlClick Coords:
Style:
ExStyle:
Handle:

>>>> Mouse <<<<
Position: 693, 14
Cursor ID: 0
Color: 0x848284

>>>> StatusBar <<<<

>>>> ToolsBar <<<<

>>>> Visible Text <<<<
Ре&жим:
Офисный режим
Тип изображения
Ц&ветное
&Оттенки серого
&Ч-Б
Назначение
Источник &документа:
Автоопределение
Раз&мер:
A4(210 x 297 мм)
Ориента&ция:
Разре&шение:
300
300
dpi
П&араметр изображения:
Нет
С&кан. с приоритетом скорости
Настройка изображения
&Яркость:
0
Slider1
Ко&нтрастность:
0
Slider1
Пов&ышение резкости
&Удаление растра
У&лучшение текста
&Просмотр
&Сканировать
Сп&равка
Конфигура&ция...
&Закрыть


>>>> Hidden Text <<<<
Задайте настройки сканирования для функции Скан. в PDF и нажмите Закрыть.
Настройка изображения
Поро&г
Slider1

Окно предупреждения имеет надпись:
Время вышло.
Соединение прервано.
Перезапустите программу EPSON Scan, если необходимо.
Программа EPSON Scan будет закрыта.
И идентификаторы
>>>> Window <<<<
Title: EPSON Scan
Class: #32770
Position: 506, 291
Size: 392, 165
Style: 0x94C801C5
ExStyle: 0x00010109
Handle: 0x00000000000E0260

>>>> Control <<<<
Class: Static
Instance: 2
ClassnameNN: Static2
Name:
Advanced (Class): [CLASS:Static; INSTANCE:2]
ID: 65535
Text: Время вышло.
Соединение прервано.
Перезапустите программу EPSON Scan, если необходимо.
Программа EPSON Scan будет закрыта.
Position: 62, 23
Size: 294, 54
ControlClick Coords: 38, 30
Style: 0x50022080
ExStyle: 0x00000004
Handle: 0x0000000000120270

>>>> Mouse <<<<
Position: 609, 366
Cursor ID: 0
Color: 0xFFFFFF

>>>> StatusBar <<<<

>>>> ToolsBar <<<<

>>>> Visible Text <<<<
ОК
Время вышло.
Соединение прервано.
Перезапустите программу EPSON Scan, если необходимо.
Программа EPSON Scan будет закрыта.


>>>> Hidden Text <<<<
Окно отлавливается если оно главное, а если в фоне или сеанс заблокирован - то нет. Как отловить?
Скрипт запускается на W2008 R2 (64x)
 
Верх