如何在活动 window 不再是所需的 window 时立即停止脚本
How to stop script as soon as active window is no longer the desired window
我正在为特定 window 的一些预先确定的点击和发送编写脚本。
有时单击不会在所需位置结束,它可能会单击不同的 window,现在我的脚本的所有后续输入都将发送到错误的 window/location。
这是代码的执行部分,我似乎无法做到 100% 一致。
CoordMode, Mouse, Window
SetTitleMatchMode, 2
<!p::
Click, 60, 270
Send, %dp%{Tab}{Tab}{Tab}{Tab}%e1%{Tab}^a ; Plate thickness and layout
Send, %PLh% ; Plate Height
Click, 60, 130
Sleep 100
Click, 263, 45
Sleep 20
Click, 263, 45
Sleep 20
Click, 370, 48
Sleep 100
Click, %Mx%, %My% ; Bolt Diameters (M16: 40, 135) (M20: 40, 150) (M24: 40, 170) (M27: 40, 190) (M30: 40, 210)
Sleep 50
Click, 60, 160
Send, {Tab}{Tab}{Tab}%w1%{Tab}{Tab}^a ; Hor Bolt center distance
Sleep 50
Send, 0{Tab}^a ; Edge distance
Send, 0 ; Edge distance
Sleep 100
Click, 60, 190
Sleep 100
Send, {Tab}{Tab}%e3% ; Vert interm distance
Send, {Tab}{Tab}{Tab}{Tab}{Tab}%e2% ; vert outside bolt dist
Click, 60, 295
Sleep 100
Send, {Tab}%Stiff%{Tab}{Tab}{Tab}%Stiff% ; Stiffener thickness
Sleep 100
Click, 60, 320
Sleep 100
Send, %Weld%{Tab}{Tab}{Tab}%Weld%{Tab}{Tab}%Weld%{Tab}{Tab}%Weld%{Tab}{Tab}%Weld% ; Weld thickness
Return
如果这部分代码中的任何点击导致激活不需要的 window 那么我希望我的脚本停止并发出警告。
我可以为每次点击插入一个 If Winactive 语句,但我觉得这很不雅观,也许有更好的解决方案?
(我也可以问如何使这个脚本更加一致,我已经尝试通过插入睡眠命令来做到这一点,但这是一个不同的问题。罪魁祸首似乎是点击下拉框,但它是很难确定,因为我无法通过 运行 逐行调试 AHK 代码)
提前致谢
Yane 非常友好地向我指出了 "Controlsend" 和 "Controlclick" 的方向,其中涵盖了我遇到的问题。
而不是使用,例如:
Click, 60, 300
可以像这样强制点击特定的 window:
ControlClick, x60 y300, MyDesiredWindow'sTitle
此外,要解决我的特定情况,即单击保管箱会抛出脚本的其余部分,可以使用以下内容:
ControlClick, ComboBox1, MyDesiredWindow'sTitle
这将单击特定 window 中的特定控件。 (使用Window间谍识别windows和控制)
我想我的问题在很大程度上与正确使用 ControlSend 和其他 AHK 命令和实践无关。
在我看来,可以直接回答标题中的问题,虽然我的回答并没有真正做到这一点,但当我有可能这样做时,我会接受我自己的回答,因为它做到了解决我的问题。
我正在为特定 window 的一些预先确定的点击和发送编写脚本。
有时单击不会在所需位置结束,它可能会单击不同的 window,现在我的脚本的所有后续输入都将发送到错误的 window/location。
这是代码的执行部分,我似乎无法做到 100% 一致。
CoordMode, Mouse, Window
SetTitleMatchMode, 2
<!p::
Click, 60, 270
Send, %dp%{Tab}{Tab}{Tab}{Tab}%e1%{Tab}^a ; Plate thickness and layout
Send, %PLh% ; Plate Height
Click, 60, 130
Sleep 100
Click, 263, 45
Sleep 20
Click, 263, 45
Sleep 20
Click, 370, 48
Sleep 100
Click, %Mx%, %My% ; Bolt Diameters (M16: 40, 135) (M20: 40, 150) (M24: 40, 170) (M27: 40, 190) (M30: 40, 210)
Sleep 50
Click, 60, 160
Send, {Tab}{Tab}{Tab}%w1%{Tab}{Tab}^a ; Hor Bolt center distance
Sleep 50
Send, 0{Tab}^a ; Edge distance
Send, 0 ; Edge distance
Sleep 100
Click, 60, 190
Sleep 100
Send, {Tab}{Tab}%e3% ; Vert interm distance
Send, {Tab}{Tab}{Tab}{Tab}{Tab}%e2% ; vert outside bolt dist
Click, 60, 295
Sleep 100
Send, {Tab}%Stiff%{Tab}{Tab}{Tab}%Stiff% ; Stiffener thickness
Sleep 100
Click, 60, 320
Sleep 100
Send, %Weld%{Tab}{Tab}{Tab}%Weld%{Tab}{Tab}%Weld%{Tab}{Tab}%Weld%{Tab}{Tab}%Weld% ; Weld thickness
Return
如果这部分代码中的任何点击导致激活不需要的 window 那么我希望我的脚本停止并发出警告。
我可以为每次点击插入一个 If Winactive 语句,但我觉得这很不雅观,也许有更好的解决方案?
(我也可以问如何使这个脚本更加一致,我已经尝试通过插入睡眠命令来做到这一点,但这是一个不同的问题。罪魁祸首似乎是点击下拉框,但它是很难确定,因为我无法通过 运行 逐行调试 AHK 代码)
提前致谢
Yane 非常友好地向我指出了 "Controlsend" 和 "Controlclick" 的方向,其中涵盖了我遇到的问题。
而不是使用,例如:
Click, 60, 300
可以像这样强制点击特定的 window:
ControlClick, x60 y300, MyDesiredWindow'sTitle
此外,要解决我的特定情况,即单击保管箱会抛出脚本的其余部分,可以使用以下内容:
ControlClick, ComboBox1, MyDesiredWindow'sTitle
这将单击特定 window 中的特定控件。 (使用Window间谍识别windows和控制)
我想我的问题在很大程度上与正确使用 ControlSend 和其他 AHK 命令和实践无关。
在我看来,可以直接回答标题中的问题,虽然我的回答并没有真正做到这一点,但当我有可能这样做时,我会接受我自己的回答,因为它做到了解决我的问题。