Вопрос
Я бы хотел, чтобы AutoHotkey автоматически определял, когда появляется определенное всплывающее диалоговое окно, и предпринимал определенные действия. Как я могу это сделать?
Конкретный пример
В моем конкретном случае я бы хотел, чтобы AutoHotkey закрывал диалоговое окно « Обновление оглавления », отображаемое Word, когда я хочу обновить оглавление.
Это рабочий процесс:
- Я обновляю заголовки в моем документе Word
- Я нажимаю Ctrl+A, чтобы выбрать весь документ
- Я нажимаю F9, чтобы обновить все поля
Это раздражающее модальное диалоговое окно появляется (который не может быть настроен согласно моим поискам Google)
Теперь мне нужно нажать стрелку вниз, чтобы выбрать Обновить всю таблицу, а затем Enter, чтобы нажать Ok и продолжить.
Я бы хотел, чтобы AutoHotkey автоматически выдавал команду « Стрелка вниз», « Ввод», потому что описанный выше рабочий процесс я выполняю десятки раз в день.
Конечно, поскольку я запускаю рабочий процесс, я могу просто написать скрипт AutoHotkey, который сделает все за меня, начиная с Ctrl+A, например:
#IfWinActive ahk_class OpusApp
F9::
Send, ^a
Send, {F9}
Sleep, 200
Send, {Down}
Send, {Enter}
return
Тем не менее, приведенный выше пример только для иллюстрации, и бывают случаи, когда всплывающие диалоги появляются случайным образом, и я бы хотел, чтобы AutoHotkey выполнял некоторые действия в зависимости от заголовка всплывающего диалога.
Мои исследования до сих пор
- Некоторые интернет-источники предлагают использовать цикл AutoHotkey, который бесконечно зацикливается и проверяет, скажем, каждую секунду, существует ли окно с определенным заголовком, а затем закрывает его. Но я считаю, что это пустая трата ресурсов процессора
- В некоторых других интернет-источниках упоминается хук оболочки вместе с фрагментом кода, и я думаю, что так оно и есть, но я не понимаю фрагмент кода; Может ли кто-нибудь объяснить, как это работает, и дать понятный пример, если это было решением?
Следующий фрагмент кода скопирован отсюда.
SetBatchLines, -1
Process, Priority,, High
Gui +LastFound
hWnd := WinExist()
DllCall( "RegisterShellHookWindow", UInt,hWnd )
MsgNum := DllCall( "RegisterWindowMessage", Str,"SHELLHOOK" )
OnMessage( MsgNum, "ShellMessage" )
Return
ShellMessage( wParam,lParam ) {
If ( wParam = 32772 or WParam = 4) ; HSHELL_WINDOWACTIVATED := 4 or 32772
WinGetActiveTitle, Title
If ( Title = "sun 4 - foxtrot - Remote Desktop Connection" )
SetCapsLockState, on
else SetCapsLockState, off
}
Я вижу
If (Title = "sun 4 - foxtrot - Remote Desktop Connection")
часть. Что делает весь отдых?