1

Тема: AHK: не ловит окно IE "Сохранить как"

Мне нужно словить событие открытия в браузере IE вспомогательного окна "Сохранить как" (когда мы сохраняем какой-то файл).
Вот код:


#Persistent
Gui +LastFound
hWnd := WinExist()

DllCall( "RegisterShellHookWindow", UInt,hWnd )
MsgNum := DllCall( "RegisterWindowMessage", Str,"SHELLHOOK" )
OnMessage( MsgNum, "ShellMessage" )
Return

ShellMessage( wParam,lParam ) {
  Local k
  If ( wParam = 1 ) ;  HSHELL_WINDOWCREATED := 1
     {
       NewID := lParam
       SetTimer, MsgBox, -1
     }
}

MsgBox:
 WinGetTitle, Title, ahk_id %NewID%
 WinGetClass, Class, ahk_id %NewID%
 TrayTip, New Window Opened, Title:`t%Title%`nClass:`t%Class%
Return

Все окна ловит кроме окна "Сохранить как".
Я могу конечно воспользоваться альтернативой: по таймеру проверять все открытые окна... Но прежде хотелось бы обойтись без этого.
Подскажите пожалуйста что можно сделать в данной ситуации?

2

Re: AHK: не ловит окно IE "Сохранить как"

Возможно этот код не реагирует на модальные окна, не вникал. Вот такой работает:

#Persistent
EVENT_OBJECT_SHOW := 0x8002
Hook := new WinEventHook(EVENT_OBJECT_SHOW, EVENT_OBJECT_SHOW, "HookProc")

HookProc(hWinEventHook, event, hwnd, idObject)
{
   static OBJID_WINDOW := 0
   if (idObject != OBJID_WINDOW)
      Return
   
   WinGetTitle, Title, ahk_id %hwnd%
   WinGetClass, Class, ahk_id %hwnd%
   if (Class = "#32770" && Title = "Сохранить как")
      TrayTip, New Window Opened, Title:`t%Title%`nClass:`t%Class%
}

class WinEventHook
{
   __New(eventMin, eventMax, hookProc, idProcess := 0, idThread := 0, dwFlags := 0) {
      this.hHook := DllCall("SetWinEventHook", "UInt", eventMin, "UInt", eventMax
                                             , "Ptr", 0, "Ptr", RegisterCallback(hookProc, "F")
                                             , "UInt", idProcess, "UInt", idThread, "UInt", dwFlags, "Ptr")
   }
   __Delete() {
      DllCall("UnhookWinEvent", "Ptr", this.hHook)
   }
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: не ловит окно IE "Сохранить как"

teadrinker Вы прямо Всеведущий Мудрец по AHK! Всегда подскажите как решить проблему.
Спасибо большое! Все отлично работает!

4

Re: AHK: не ловит окно IE "Сохранить как"

teadrinker
Можно немного объяснить про "модальные окна", это все с классом '#32770' я так понимаю?

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

5

Re: AHK: не ловит окно IE "Сохранить как"

Тут не в классе дело, а в том, что окно является принадлежащим другому окну (owned) и при появлении препятствует действиям пользователя в основном окне. Чаще всего такие окна имеют класс #32770, но это не обязательно.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder