Что нового

[Автоматизация] Internet Explorer Notification Frame

KOPOJlb

Новичок
Сообщения
5
Репутация
0
Доброго времени!
Надеюсь на вашу помощь. Пытаюсь в выплывающем стандартном (начиная с 9 версии Explorer'а) окне выбрать save as. Отправлять хочу, как в свернутое, так и в развернутое окно. Написал вот такой скрипт. Он почему-то работает через раз с развернутым окном, и ни разу со свернутым.
Код:
$iehandle = hwnd("0x" & Hex($CmdLine[1]))
$delay = $CmdLine[2]


AutoItSetOption("SetKeyDownDelay",10)

$a = ControlGetHandle($iehandle, "", "[CLASS:Frame Tab]")
$b = ControlGetHandle($a, "", "[CLASS:TabWindowClass]")
$c = ControlGetHandle($b, "", "[CLASS:Shell DocObject View]")
$iecontrol = ControlGetHandle($c, "", "[CLASS:Internet Explorer_Server]")

ControlSend("","",$iecontrol,"{F6}")

sleep($delay)
;Поиск notification bar
$notbar =  ControlGetHandle($iehandle, "", "[CLASS:Frame Notification Bar]")
$notbarcontrol = ControlGetHandle($notbar, "", "[CLASS:DirectUIHWND]")


sleep($delay)
ControlSend("","",$notbarcontrol,"{TAB}")
sleep($delay)
ControlSend("","",$notbarcontrol,"{DOWN}")


WinWait ("[CLASS:#32768; INSTANCE:1]")
$popup = WinGetHandle("[CLASS:#32768; INSTANCE:1]")
Sleep($delay)
ControlSend("","",$popup,"{DOWN}")
sleep($delay)
ControlSend("","",$popup,"{ENTER}")


Самое интересное, что до этого пробовал вместо строки
Код:
ControlSend("","",$iecontrol,"{F6}")

Писать строку
Код:
ControlSend("","",$iecontrol,"!{n}")

И тогда скрипт работает всегда в свернутом окне, и почти никогда в развернутом.
Подскажите куда копать? Я так понял есть интересная библиотек ie.au3. Но я не знаю как получить кнопки Notification bar'а.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Если в функции ControlSend() первый параметр пустой, то будет выбрано активное окно. Поэтому, для начала, укажите конкретное окно (я так понимаю $iehandle).
 
Автор
K

KOPOJlb

Новичок
Сообщения
5
Репутация
0
Код:
ControlSend($iehandle,"",$iecontrol,"{F6}")

и т.д.
Сделал, но не помогло, в свернутом окне по-прежнему не работает. Да, следовало сказать, что хэндл окна я передаю из другого приложения, которое создает это окно.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Не могу воспроизвести ваши действия даже вручную :scratch:
Что такое "notification bar" ?

KOPOJlb [?]
А если
Код:
ControlSend($iehandle, "", "[CLASS:Internet Explorer_Server]", "^s")
это не то?
 
Автор
K

KOPOJlb

Новичок
Сообщения
5
Репутация
0
Вот на скрине Notification bar)
Что-то я не пойму, скрин прикрепился?
Это встроенная защита в Explorer начиная с 9 версии. При попытки загрузки файлов вываливается желтая полоса, с вопросом Хотите открыть или сохранить?
http://windows.microsoft.com/en-us/internet-explorer/products/ie-9/features/notification-bar
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
KOPOJlb
Пробуйте (проверял на IE10). Только в свёрнутом окне работать не будет (из-за всплывающего меню)
Код:
Opt("SendKeyDelay", 10)
$iehandle = WinGetHandle("[CLASS:IEFrame]")

$bar = ControlGetHandle($iehandle, "", "[CLASS:Frame Notification Bar]")
If $bar And ControlCommand($iehandle, "", $bar, "IsVisible") Then
  ControlSend($iehandle, "", "Internet Explorer_Server1", "{F6}")
  ControlSend($iehandle, "", "DirectUIHWND1", "{TAB}{DOWN}")
  WinWait("[CLASS:#32768]")
  Send("{DOWN}{ENTER}")
EndIf
 
Автор
K

KOPOJlb

Новичок
Сообщения
5
Репутация
0
Да, работает, спасибо, но я специально начал использовать autoit для того, чтобы отправлять нажатия в свернутое окно. Думаете, что это невозможно реализовать в данном случае?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
KOPOJlb [?]
реализовать в данном случае
А смысл? После выбора "Сохранить как" появляется диалоговое окно сохранения, у которого нет кнопки "Свернуть". Оно всё равно "вылезет" на экран.

OffTopic:
Для закачки файлов есть функция InetGet(). Но это уже другая тема.
 
Автор
K

KOPOJlb

Новичок
Сообщения
5
Репутация
0
Да смысл на самом деле простой, не показывать пользователю то, что ему видеть и не надо. Кстати, если поверх окна explorer вытащить другое, скрипт будет работать? Просто я в хелпе не понял про isvisible.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
KOPOJlb [?]
не показывать пользователю то, что ему видеть и не надо
Пользовательский интерфейс для того и придуман, чтобы пользователь с ним работал (т.е. видел). Пытаться работать с ним путём скрытия - это задача, противоречащая данной концепции. Пробуйте другие способы загрузки и сохранения файла.

если поверх окна explorer вытащить другое, скрипт будет работать?
Вы с телефона, что ли, пишите? Сами проверить не в состоянии?
У меня в этом случае окно IE выходит на передний план.
 
Верх