คำถาม
ฉันต้องการให้ AutoHotkey ตรวจพบโดยอัตโนมัติเมื่อมีข้อความโต้ตอบปรากฏขึ้นและดำเนินการบางอย่าง ฉันจะทำอย่างไร
ตัวอย่างคอนกรีต
ในกรณีเฉพาะของฉันฉันต้องการ AutoHotkey เพื่อปิดกล่องโต้ตอบอัปเดตสารบัญ Word จะปรากฏขึ้นเมื่อฉันต้องการอัปเดตสารบัญ
นี่คือขั้นตอนการทำงาน:
- ฉันอัปเดตชื่อในเอกสาร Word ของฉัน
- ฉันกดCtrl+ Aเพื่อเลือกเอกสารทั้งหมด
- ฉันกดF9เพื่ออัปเดตทุกฟิลด์
กล่องโต้ตอบโมดอลที่น่ารำคาญนี้ปรากฏขึ้น (ซึ่งไม่สามารถกำหนดค่าได้ตามการค้นหา Google ของฉัน)
ตอนนี้ฉันต้องกดArrow downเพื่อเลือกอัปเดตตารางทั้งหมดแล้วตามด้วยEnterเพื่อกดตกลงและดำเนินการต่อ
ฉันต้องการ AutoHotkey ที่จะออกโดยอัตโนมัติArrow down, Enterคำสั่งเพราะเวิร์กโฟลว์อธิบายไว้ข้างต้นเป็นสิ่งที่ฉันทำโหลครั้งต่อวัน
แน่นอนเพราะฉันเริ่มต้นเวิร์กโฟลว์ฉันสามารถเขียนสคริปต์ AutoHotkey ที่ทำทุกอย่างให้ฉันเริ่มต้นด้วยCtrl+ Aดังนี้:
#IfWinActive ahk_class OpusApp
F9::
Send, ^a
Send, {F9}
Sleep, 200
Send, {Down}
Send, {Enter}
return
อย่างไรก็ตามตัวอย่างข้างต้นเป็นเพียงภาพประกอบวัตถุประสงค์และมีบางกรณีที่กล่องโต้ตอบป๊อปอัปปรากฏขึ้นแบบสุ่มและฉันต้องการ AutoHotkey ดำเนินการบางอย่างขึ้นอยู่กับชื่อของกล่องโต้ตอบป๊อปอัป
การวิจัยของฉันจนถึงตอนนี้
- แหล่งที่มาของอินเทอร์เน็ตบางแห่งแนะนำให้ใช้การวนรอบ AutoHotkey ที่วนซ้ำและตรวจสอบอย่างต่อเนื่องโดยบอกว่าทุกวินาทีไม่ว่าจะมีหน้าต่างที่มีชื่อเรื่องที่แน่นอนอยู่แล้วปิดลง แต่ฉันพบว่ามันเป็นการสิ้นเปลืองทรัพยากรของ CPU
- แหล่งข้อมูลทางอินเทอร์เน็ตอื่น ๆ พูดถึงshell hookพร้อมกับข้อมูลโค้ดและฉันคิดว่านั่นเป็นวิธีที่จะไป แต่ฉันไม่เข้าใจข้อมูลโค้ด ทุกคนสามารถอธิบายวิธีการทำงานและให้ตัวอย่างที่เข้าใจได้ซึ่งเป็นวิธีแก้ปัญหาหรือไม่
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")
ส่วนหนึ่ง สิ่งที่เหลือทั้งหมดทำอะไร?