不幸的是,您不能使用 IfWinActive 以您想要的方式触发脚本。虽然有解决方案。
一种方法是每 100 到 500 毫秒运行一个小测试脚本,以查看金山软件是否处于活动状态。或者,您可以使用一些系统调用在每次对任何窗口的焦点发生更改时触发测试脚本。这是一个例子!
带有 ShellMessage 的选项 1
#SingleInstance
#installKeybdHook
#Persistent
Global SwitchCounter
Gui +LastFound
hWnd := WinExist()
DllCall( "RegisterShellHookWindow", UInt,Hwnd )
MsgNum := DllCall( "RegisterWindowMessage", Str,"SHELLHOOK" )
OnMessage( MsgNum, "ShellMessage" )
Return
ShellMessage( wParam )
{
If (wParam = 4)
{
IfWinActive, ahk_class QWidget
{
Sleep 2000
Click 486, 15
Click 570, 93
;Send (various keystrokes)
Return
}
}
}
Return
选项 2 以固定时间间隔检查
#SingleInstance
#installKeybdHook
#Persistent
SetTimer, CheckWin, 1000 ; This is executed on startup of AutoHotKey
Return ; Anything below this point is not executed on startup
CheckWin:
WinGetTitle, CurrName, A
If (CurrName = "KingSoft")
{
if (CurrName = PrevName)
Return ; Only continue if an other application was activated
PrevName = %CurrName% ; When new app, then sync CurrName and PrevName
SoundBeep, 500, 200
TrayTip, KingSoft, Activated, 2
}
Return
我只发出声音并在系统托盘中显示一条消息。时间间隔设置为 1000 毫秒,因为仅蜂鸣声就需要 200 毫秒。基于计时器的解决方案会不断发出哔哔声,因此我检查应用名称是否有变化。默认情况下,ShellMessage 仅在您将金山软件置于焦点时才会发出哔声。
这个脚本来自move GUI and daughter together,当计算器和其他应用程序行为相同时我们触发一个动作(同时最小化或恢复)
如果只是检测应用程序是否正在运行,那么使用 settimer 并每 200 毫秒执行一次 ifWinExist 可能会更容易(尽管 ShellMessage 更好)。