【问题标题】:AHK code issue - Importing and defining variables in AHK?AHK 代码问题 - 在 AHK 中导入和定义变量?
【发布时间】:2020-06-25 20:22:49
【问题描述】:

我对 AHK 还是很陌生。我几天前才刚开始,遇到了困难,需要帮助调试。

我希望这段代码转到指定的鼠标位置并单击坐标,然后导入我的变量,因为我有许多 AHK 脚本引用相同的变量。

问题:代码当前没有移动鼠标并点击所需位置。我什至不确定它是否在点击。它只是显示 ToolTip 消息以及 msgbox 消息。 (将显示的消息在代码中标记为通过 [works] 工作)。我认为这可能是因为变量未定义...当 msgbox 中显示的变量在 if/else 语句中定义时,msgbox 将为空。 Clicks 也不起作用,我认为这是因为这些值不存在。我不知道为什么会发生这种情况。

我的代码有什么问题,发生了什么?请帮帮我!

#include C:\Users\username\Desktop\vars.txt
CoordMode, Mouse, Screen
clickThing(whichThing) { ;START FUNCTION
    Sleep, 1000 ; sleep 1 sec
    Send ^h ; control h
    Sleep, 3000 ; sleep 3 sec
    if (whichThing = 1){
        goTox = %x1%
        goToy = %y1%
        ToolTip, option 1 ; display "option 1" @ cursor tip ; [works]
    } else if (whichThing = 2) {
        goTox = %x2%
        goToy = %y2%
        ToolTip, option 2 ; display "option 2" @ cursor tip ; [works]
    } else if (whichThing = 3) {
        goTox = %x3%
        goToy = %y3%
        ToolTip, option 3; display "option 3" @ cursor tip ; [works]
    } else {
        msgbox that isn't a valid choice. ; [works]
        return
    }
    msgbox %goTox% %goToy% ; msgbox will be empty...
    ; I tried this
    Sleep 1000
    MouseMove, %goTox%, %goToy%, 30
    MouseClick, left, %goTox%, %goToy%
    Sleep 500
    MouseClick, left, %goTox%, %goToy%
    Sleep 1000
    ; I also tried this
    Click %goTox%, %goToy%
} ;END OF FUNCTION

;START MAIN CODE
IfWinActive, window_name {
    clickThing(1)}
else{
    msgbox, window not active ; [works]
}

msgbox, finished ; [works]
return

vars.ahk:

; Test variables
x1 := 1
x2 := 2
x3 := 3
y1 := 4
y2 := 5
y3 := 6

编辑:原来我的变量是空的。为什么是空的?此代码输出正确的值

#include C:\Users\user\Desktop\vars.txt
msgbox %x1%

但是一旦我尝试分配给一个变量,msgbox 是空的,并且我得到一个变量为空的错误。

#include C:\Users\user\Desktop\vars.txt
newvar = %x1%
msgbox = %newvar% ; gives an error that the var is empty

【问题讨论】:

  • 您在哪里定义 x1、x2、x3 等?他们对我来说似乎是空的。如果在外面定义,需要在函数内标记为“全局”,否则为空
  • 它们是在 vars.txt 中定义的!即使我不会在函数之外使用它们,我是否需要用全局标记它们?当我导入变量时,它们不是全局的吗?
  • 我尝试在 if/else 语句中添加global goTo = %var%,现在它说 var 为空。为什么是空的?不应该从文本文件中导入吗?

标签: autohotkey


【解决方案1】:

您的函数需要针对您要在其中访问的每个全局变量的全局语句。

这样

clickThing(whichThing) { ;START FUNCTION


    global x1
    global x2
    global x3
    global y1
    global y2
    global y3

    Sleep, 1000 ; sleep 1 sec

    ... the rest of your code here

如果还有问题,请提供 "#include C:\Users\user\Desktop\vars.txt" 文件,没有它, 你的例子是不可重现的。 (由于您是 Stack Overflow 的新手: 请注意,提出问题的要求之一是提供 完整示例...)

【讨论】:

  • 哦,我明白了!谢谢!我以不同的方式解决了这个问题。我将变量传递给函数,它开始工作。但这更好。一开始我只是不知道在哪里声明全局变量。我原以为它们会像其他语言一样在函数之外声明。
  • 对不起,我太笨了。我刚刚意识到这与大多数其他语言相同。您需要声明为全局或传递给函数。我不知道我在想什么!
  • 不用担心会变笨 - 你只是在学习如何在 AHK 中做事,每种语言对全局变量的处理方式都不同。例如,在 Python 或 Pascal 中,全局变量在函数中工作得非常好。就个人而言,我建议不要在函数中使用全局变量,因为这样可能很难发现副作用。
猜你喜欢
  • 1970-01-01
  • 2015-08-22
  • 1970-01-01
  • 2016-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-05
相关资源
最近更新 更多