Autohotkey 自动热键像素颜色比较永远不会产生真值

Autohotkey 自动热键像素颜色比较永远不会产生真值,autohotkey,Autohotkey,我正在比较屏幕上一个按钮的颜色,看看它是否从灰色变为蓝色,如果变了,就点击它 以下是我的代码片段: pixelgetcolor c,%x1%,%y1% msgbox %c% ifequal, c, COLOR ; word COLOR is a place holder here .please see below for what I tried in place { mousemove,%x1%,%y1% mouseclick,l } 在msgbox输

我正在比较屏幕上一个按钮的颜色,看看它是否从灰色变为蓝色,如果变了,就点击它

以下是我的代码片段:

  pixelgetcolor c,%x1%,%y1%
  msgbox %c%
  ifequal, c, COLOR ; word COLOR is a place holder here .please see below for what I tried in place 
  {
    mousemove,%x1%,%y1%
    mouseclick,l
  }
msgbox
输出中,我可以看到颜色为
254ADD
,下面是我尝试用以替代上面的单词color的内容

254ADD
"254ADD"
COL=254ADD  then 
   %COL%
   COL
   "COL"
   "%COL%"
在所有这些情况下,我的IfEqual行都没有生成“true”并单击按钮


我遗漏了什么吗?

有一件事我没有尝试用0x254ADD来代替单词COLOR,它奇迹般地工作了

我没有尝试用0x254ADD来代替颜色这个词,它奇迹般地工作了

默认情况下,颜色应返回为BGR(蓝绿红)
0x
前缀为大写十六进制。
如果你的msgbox显示的是
254ADD
,而不是
0x254ADD
,我真的不知道该说什么。这不应该发生。也许你是在玩一个行为古怪的旧版本

但不管怎样,现在我们来谈谈。我认为你不可能找到更传统的AHK命令。这和2005年的水平差不多。请切换到未弃用的现代语句。
但不管怎样,您现在要做的是将变量
c
持有的值与文本
254ADD

当然,这永远不会是真的。数字不等于某些文本。
如果您添加
0x
前缀,那么AHK知道您所指的是十六进制前缀。然后你将一个数字与另一个数字进行比较。现在至少有一个机会,你的if陈述会变成真的

因此,有两种方法可以做到:

IfEqual, c, 0x254ADD ;in hex
IfEqual, c, 2443997 ;in dec

但请去掉超贬义的遗留命令,总体上,考虑切换到使用新的、优越的表达式语法。 以下是所有非遗留代码:

PixelGetColor, c, % x1, % y1
MsgBox, % c
if (c = 0x254ADD)
{
    MouseMove, % x1, % y1
    Click
}
这里有一个很好的文档页面,可以帮助您开始学习传统语法和表达式语法之间的区别:

默认情况下,颜色应返回为BGR(蓝绿红)
0x
前缀为大写十六进制。
如果你的msgbox显示的是
254ADD
,而不是
0x254ADD
,我真的不知道该说什么。这不应该发生。也许你是在玩一个行为古怪的旧版本

但不管怎样,现在我们来谈谈。我认为你不可能找到更传统的AHK命令。这和2005年的水平差不多。请切换到未弃用的现代语句。
但不管怎样,您现在要做的是将变量
c
持有的值与文本
254ADD

当然,这永远不会是真的。数字不等于某些文本。
如果您添加
0x
前缀,那么AHK知道您所指的是十六进制前缀。然后你将一个数字与另一个数字进行比较。现在至少有一个机会,你的if陈述会变成真的

因此,有两种方法可以做到:

IfEqual, c, 0x254ADD ;in hex
IfEqual, c, 2443997 ;in dec

但请去掉超贬义的遗留命令,总体上,考虑切换到使用新的、优越的表达式语法。 以下是所有非遗留代码:

PixelGetColor, c, % x1, % y1
MsgBox, % c
if (c = 0x254ADD)
{
    MouseMove, % x1, % y1
    Click
}
这里有一个很好的文档页面,可以帮助您开始学习传统语法和表达式语法之间的区别: