为ControlSetText使用

时间:2018-04-25 13:08:53

标签: autohotkey

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"

1 个答案:

答案 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