我想编写一个AutoHotKey脚本,以用户从列表中选择的颜色绘制对象。激活脚本后,将在命令行上打印第一个选项:
画画(等等,白色)
这是我不太优雅的尝试:
#IfWinActive Command Prompt
^z::
i := 0
loop
{
mod_i := Mod(i,7)
if(mod_i = 0)
col := "White"
else if(mod_i=1)
col := "Orange"
else if(mod_i=2)
col := "Purple"
else if(mod_i=3)
col := "Green"
else if(mod_i=4)
col := "Red"
else if(mod_i=5)
col := "Blue"
else if(mod_i=6)
col := "Yellow"
send {Esc} draw (blah, %col% )
Input, OutputVar, L1, {Enter}{Escape}
IfInString, ErrorLevel, EndKey:
{
;ErrorLevel is set to the word EndKey followed by a colon and the name of the EndKey
if ErrorLevel = EndKey:Enter
{
send {Enter}
break
}
else if ErrorLevel = EndKey:Escape
{
send {Esc}
break
}
}
if (OutputVar == "n")
i++
else if (OutputVar == "N")
i--
; break out after 20 loops
if (A_Index > 20)
break
}
return
这似乎有效。但是,如果脚本正在运行并且另一个窗口已激活,则脚本将作用于该窗口。对于当前的实现,我认为这是可以预期的。那么有没有办法将脚本操作限制在一个窗口?当窗口处于非活动状态时可能暂停脚本?
如果我可以厚颜无耻并提出第二个问题;有没有更有效的方法在AutoHotKey中实现循环列表?
答案 0 :(得分:1)
您需要使用ControlSend而不是发送。
ControlSend, , {Esc} draw (blah, %col% ), Untitled - Notepad
显然你会将最后一个参数改为程序的标题或ahk_class / exe。
答案 1 :(得分:0)
即使窗口关闭后,热键仍继续运行,您需要在每次迭代结束时检查活动窗口是否为命令提示符。
如果不使用'break'命令结束循环。