autohotkey中可用pixelgetcolor读取屏幕指定坐标颜色值,支持十六进制(0xrrggbb)、rgb字符串及十进制格式;配合coordmode、mousegetpos、loop可实现单点、动态、区域扫描取色,并需通过dpi适配解决高缩放率下的坐标偏移问题。

如果您希望在AutoHotkey脚本中读取屏幕上某一固定坐标点的颜色值,则可以使用内置命令PixelGetColor。该命令会从指定屏幕位置获取RGB颜色值,并以十六进制格式(如0xRRGGBB)或十进制整数形式返回。以下是实现此功能的多种方法:
一、基础用法:直接调用PixelGetColor获取单点颜色
PixelGetColor命令默认以十六进制格式返回颜色值,需提供X、Y坐标及可选的颜色格式参数。结果存储于指定变量中,后续可进行比较或显示。
1、新建一个文本文件,扩展名为.ahk,例如getcolor.ahk。
2、在文件中输入以下代码:
CoordMode, Pixel, Screen
PixelGetColor, color, 100, 200
MsgBox, 坐标(100,200)处的颜色值为: %color%
3、双击运行该脚本,弹窗将显示该坐标的十六进制颜色值(如0xFF5A3C)。
4、注意:坐标系以屏幕左上角为原点,X向右递增,Y向下递增;确保目标窗口未被遮挡且处于可见状态。
二、带格式转换的取色:获取RGB分量或十进制值
PixelGetColor支持通过第三个参数指定输出格式,例如使用RGB可使返回值为R000000G000000B000000格式字符串,便于拆解各通道值;使用Alt可返回十进制整数。
1、编写如下脚本:
CoordMode, Pixel, Screen
PixelGetColor, color_hex, 320, 240, RGB
StringMid, r, color_hex, 2, 6
StringMid, g, color_hex, 8, 6
StringMid, b, color_hex, 14, 6
MsgBox, R=%r%`nG=%g%`nB=%b%
2、运行后弹窗将分别显示红、绿、蓝三通道的十六进制数值(不含前缀)。
3、若需十进制整数表示整体颜色:
PixelGetColor, color_dec, 320, 240, Alt
MsgBox, 十进制颜色值:%color_dec%
4、RGB格式返回的是字符串,不可直接用于数值比较;Alt格式返回整数,适合条件判断。
三、动态取色:配合鼠标位置实时读取颜色
利用MouseGetPos可捕获当前鼠标指针坐标,再传入PixelGetColor实现随鼠标移动实时取色,适用于调试或颜色识别场景。
1、创建脚本并写入:
SetTimer, ReadColor, 100
Return
ReadColor:
MouseGetPos, x, y
CoordMode, Pixel, Screen
PixelGetColor, color, %x%, %y%, Alt
ToolTip, X:%x% Y:%y% → %color%
Return
2、运行脚本后,屏幕右上角将持续显示鼠标当前位置的坐标及对应十进制颜色值。
3、按Esc键退出脚本:
$Esc::ExitApp
4、SetTimer间隔不宜低于50毫秒,否则可能造成CPU占用过高。
四、区域扫描取色:遍历矩形区域内多个点的颜色
通过嵌套Loop可对指定矩形区域(如10×10像素块)逐点调用PixelGetColor,适用于检测按钮状态、UI元素是否存在等场景。
1、编写如下循环取色代码:
CoordMode, Pixel, Screen
x_start := 500, y_start := 300, width := 10, height := 10
loop, %height% {
y := y_start + A_Index - 1
loop, %width% {
x := x_start + A_Index - 1
PixelGetColor, c, %x%, %y%, Alt
if (c = 0x00FF00) {
FoundX := x, FoundY := y
break 2
}
}
}
2、该段代码搜索绿色(0x00FF00)像素点,找到即记录坐标并跳出所有循环。
3、区域过大时应限制扫描范围,避免显著延迟或误判。
五、跨DPI与多显示器适配:修正缩放导致的坐标偏移
在高DPI设置或Windows缩放比例非100%时,AutoHotkey默认坐标可能与实际像素位置不一致,需启用DPI感知或手动换算。
1、在脚本开头添加DPI适配声明:
#NoEnv
SendMode Input
SetBatchLines, -1
DetectHiddenWindows, On
CoordMode, Pixel, Screen
CoordMode, Mouse, Screen
DllCall("SetProcessDpiAwareness", "Int", 1)
2、若仍存在偏差,可手动计算缩放系数:
scale := A_ScreenDPI / 96
x_phys := Round(x_logical * scale)
y_phys := Round(y_logical * scale)
PixelGetColor, color, %x_phys%, %y_phys%
3、A_ScreenDPI仅在AHK v2或v1.1.33+中可用;旧版本需通过注册表读取GetDpiForSystem。











