我使用 AHK 1.1 将 capslock 设置为热键以切换 ArtRage 全屏模式(工作台模式),我这样做是因为 ArtRage 不允许我将 CapsLock 设置为热键,但我习惯在许多程序中使用该键来执行此操作,所以我认为 AHK 可以帮助我。
我尝试了这个并且成功了:
; AR4 Toggle Workbench Mode
If WinActive("ahk_class ArtRage 3")
Capslock::
Sleep 20
Send {SC037 Down} ; NumpadMult
Sleep 10
Send {SC037 Up} ; NumpadMult
Sleep 90
WinActivate, ahk_class ArtRage 3
return
#If
因此脚本运行良好,但不知何故 ArtRage 窗口失去了焦点,我的意思是我仍然看到 ArtRage 窗口,但我注意到它失去了焦点,因为如果我想#If WinActive("ahk_class ArtRage 3")
在上述脚本完成后立即运行另一个 AHK 热键(仅运行),它不会检测到 ArtRage 窗口已打开,因此它不会运行,除非我手动单击 ArtRage 窗口。
我尝试在Capslock
(切换工作台模式)完成后再次聚焦,但WinActivate, ahk_class ArtRage 3
没有重新聚焦到 ArtRage 窗口,在 AHK 中没有其他方法可以重新聚焦到窗口吗?
已编辑 >>> 我怎样才能IfWinExist("ahk_class ArtRage 3")
在一系列动作的末尾放置一个?因为我不能直接在我的 AHK 脚本上运行它,因为它总是会聚焦于 ArtRage,即使我在其他应用程序中工作,对吗?我试过了,但它的语法不正确,你能发个例子吗?
#If WinActive("ahk_class ArtRage 3")
Capslock::
Send {SC037 Down} ; NumpadMult
Sleep 30
Send {SC037 Up} ; NumpadMult
Sleep 30
IfWinExist("ahk_class ArtRage 3")
WinActivate, ahk_class ArtRage 3
return
#If
答案1
尝试这个(首先作为独立脚本):
; AR4 Toggle Workbench Mode
#If WinActive("ahk_class ArtRage 3")
Capslock::
KeyWait, Capslock ; wait until Capslock is released
Sleep 20
Send {NumpadMult}
Sleep 90
If !WinActive("ahk_class ArtRage 3") ; means: IfWinNotActive
{
Loop
{
; Which window becomes active in this case?
WinGetTitle, ActiveTitle, A
WinGetClass, ActiveClass, A
ToolTip, Active Window:`n%ActiveTitle% ahk_class %ActiveClass%
WinActivate, ahk_class ArtRage 3
Sleep 50
If WinActive("ahk_class ArtRage 3")
{
ToolTip
break
}
}
}
return
#If
Esc:: ExitApp