Soru
AutoHotkey'in belirli bir açılır iletişim kutusunun ne zaman görüneceğini otomatik olarak algılamasını ve belirli işlemleri gerçekleştirmesini istiyorum. Bunu nasıl yaparım?
Somut örnek
Özel durumumda, içindekileri güncellemek istediğimde AutoHotkey'in İçindekiler'i Güncelle iletişim kutusu Word'ün kapatmasını istiyorum.
Bu iş akışıdır:
- Word dokümanımdaki başlıkları güncelliyorum
- Belgenin tamamını seçmek için Ctrl+ tuşlarına basınA
- F9Tüm alanları güncellemek için tuşuna basın
Bu sinir bozucu kalıcı iletişim kutusu görünür (Google aramalarıma göre yapılandırılamaz)
Şimdi, Tüm tabloyu güncelleArrow down seçeneğini seçmek için tuşuna ve ardından Tamam tuşuna basıp devam etmek için tuşuna basmam gerekiyor.Enter
AutoHotkey'in otomatik olarak komut vermesini istiyorum Arrow down, Enterçünkü yukarıda açıklanan iş akışı günde bir düzine kez yaptığım bir şey.
Tabii ki, iş akışını başlattığım için, benim için her şeyi yapan Ctrl+ Agibi bir AutoHotkey betiği yazabilirim :
#IfWinActive ahk_class OpusApp
F9::
Send, ^a
Send, {F9}
Sleep, 200
Send, {Down}
Send, {Enter}
return
Ancak, yukarıdaki örnek yalnızca örnekleme amaçlıdır ve pop-up iletişim kutularının rastgele göründüğü durumlar vardır ve AutoHotkey'in pop-up iletişim kutusunun başlığına bağlı olarak bazı işlemler yapmasını istiyorum.
Şimdiye kadarki araştırmam
- Bazı İnternet kaynakları süresiz olarak sarkan ve kontrol eden bir AutoHotkey döngüsünün kullanılmasını önerir , her saniyede belirli bir başlığa sahip bir pencerenin olup olmadığını ve onu kapatıp kapatmadığını söyler. Ancak bunu CPU kaynaklarının israfı olarak buluyorum
- Diğer bazı İnternet kaynakları , kod pasajı ile birlikte bir kabuk kancasından bahseder ve sanırım bu yolun yoludur, ama kod pasajını anlamıyorum; kimse bunun nasıl çalıştığını açıklayabilir ve çözüm olması şartıyla anlaşılabilir bir örnek verebilir mi?
Aşağıdaki kod pasajı buradan kopyalanır .
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
}
görüyorum
If (Title = "sun 4 - foxtrot - Remote Desktop Connection")
Bölüm. Diğerleri ne iş yapıyor?