TL; DR我通过连接一个字符串,一个单独的字符串变量,然后连接另一个字符串来创建一个新变量(destinationControl)。我尝试使用变量destinationControl和ControlSetText,但它无法正常工作。谁能告诉我为什么?
长说明: 我正在尝试使用AHK ControlSetText将excel电子表格中的一些数据发送到另一个应用程序。当我需要脚本检测两个可能的程序中哪一个是活动程序(检测部分正在工作)然后根据程序名称设置目标控件名称略有不同时,我的问题就出现了。
prog_A_segment := "abc"
prog_B_segment := "def"
;determine which program is open
IfInString, OpenProgram, ProgA
{
ctrlSegment := prog_A_segment
}
else
ctrlSegment := prog_B_segment
;set control variable
destinationControl := "WindowsForms10.EDIT.app.0." . ctrlSegment . "_r13_ad11"
;activate program
WinActivate, % OpenProgram
WinWaitActive, % OpenProgram,,3
;open vendor form
Sleep 300
Send ^o
Sleep 200
Send Vendors
sleep 200
Send {ENTER}
Sleep 2000
;This does not work:
;pass information to vendor form control
ControlSetText, %destinationControl%, %myNumber%, %OpenProgram%
我知道我可以根据打开的程序稍微手动设置它们但我总共有大约25个控件,唯一的区别是中心段所以我认为这会更优雅和更清洁。
当我使用上述方法时,它不会出现AHK可以找到控件。我假设它与我如何组合字符串和变量有关。有没有办法让这种方法无需这样做:
IfInString, OpenProgram, ProgA
{
destinationControl1 := "WindowsForms10.EDIT.app.0.abc_r13_ad11"
....
destinationControl25 := "WindowsForms10.EDIT.app.0.abc_d52_ad11"
}
else
destinationControl1 := "WindowsForms10.EDIT.app.0.def_r13_ad11"
....
destinationControl25 := "WindowsForms10.EDIT.app.0.def_d52_ad11"
答案 0 :(得分:1)
我同意Josh Brobst的观点,即您的第一段代码可以使用添加的缺失引号。
嗯,这就是你想要尝试的东西:
ctrlSegment := InStr(OpenProgram, ProgA) ? "abc" : "def"
Loop Parse, % "r13, ... ,d52", CSV
ControlSetText % "WindowsForms10.EDIT.app.0." ctrlSegment "_" A_LoopField "_ad11"
, % myNumber, % OpenProgram