ฉันต้องการสร้างสคริปต์ AutoHotKey ที่รอหน้าต่างและส่งการกดแป้นบางครั้ง แต่การกดแป้นจะทำซ้ำตามค่าเริ่มต้น


5

ฉันต้องการสคริปต์ AutoHotKey ที่รอหน้าต่างใดหน้าต่างหนึ่งแล้วส่งการกดแป้นไปที่หน้าต่างนั้น อย่างไรก็ตามเนื่องจากการรอจะเสร็จสิ้นในลูปจึงมีการส่งคีย์ซ้ำแล้วซ้ำอีก

สมมติว่าฉันต้องการรอ Windows Calculator จากนั้นส่ง "12345" ไป ความพยายามครั้งแรกของฉันคือ:

#SingleInstance force
Loop
{
WinWaitActive, Calc
{
    Send, 12345
}

เห็นได้ชัดว่าสคริปต์นี้ส่ง "12345" ซ้ำแล้วซ้ำอีกเนื่องจากฉันไม่ได้แยกจากลูป

ถ้าฉันแทรก "ตัวแบ่ง" ตามหลังคำสั่ง send การวนรอบจะสิ้นสุดลง แต่สคริปต์ก็เช่นกัน

รูปแบบมาตรฐานสำหรับการจัดการสิ่งนี้คืออะไร


สิ่งที่แน่นอนคือการห่วง? WinWaitActive ไม่ควรมีลูปภายในที่หยุดการทำงานของสคริปต์ชั่วคราวจนกว่าเงื่อนไขที่กำหนดไว้โดยฟังก์ชั่นจะกลายเป็นจริงในกรณีนี้จะดำเนินการคำสั่งในวงเล็บหรือไม่
MaQleod

ฉันใส่วนซ้ำเพื่อป้องกันสคริปต์จากการยกเลิก บางทีการขาดความเข้าใจของฉันก็คือวิธีการจัดโครงสร้างสคริปต์ AutoHotKey (ดังนั้นพวกเขาจึงไม่ยุติตัวอย่าง) แทนที่จะทำในสิ่งที่ฉันพยายามทำที่นี่ ฉันจะให้สคริปต์ทำงานต่อไปได้อย่างไรเพื่อให้มันทำงานต่อไปได้?
Robert

ลูปจะทำให้มันทำงานได้ดีและถ้าคุณใช้โครงสร้างแบบนั้นคุณต้องมีเงื่อนไขภายในลูปเพื่อให้ทำงานผ่านฟังก์ชัน WinWaitActive หากไม่ได้ใช้งาน Calc อยู่แล้ว ด้วยวิธีนี้ถ้ามันใช้งานอยู่มันจะข้ามการเรียกใช้ฟังก์ชันนั้นซ้ำ ๆ จนกว่าคุณจะคลิกปิดการคำนวณแล้วมันจะเปิดใช้งานสคริปต์อีกครั้งเพื่อรอจนกว่าการคำนวณจะเปิดใช้งานอีกครั้ง
MaQleod

คำตอบ:


4

ฉันสมมติว่าคุณต้องการหยุดส่ง12345จนกว่าคุณจะเปิดใช้งานหน้าต่างอีกครั้ง (หรือหน้าต่างอื่นที่มีชื่อเดียวกัน) ดังนั้นใช้WinWaitNotActive

#SingleInstance force
Loop
{
WinWaitActive, Calc
{
    Send, 12345
    WinWaitNotActive, Calc
}

การเล่นชนิดหนึ่ง ดังนั้นเมื่อหน้าต่างเปิดใช้งานและมีการส่งคีย์การดำเนินการสคริปต์จะหยุดชั่วคราวบนบรรทัด WinWaitNotActive ...
Robert

@ Robert ใช่มันจะหยุดที่บรรทัดนั้น
avirk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.