AutoHotkey怎么使用PixelGetColor取色 AutoHotkey如何用脚本获取屏幕指定坐标位置的颜色值【脚本】

夏辰同学_1815

夏辰同学_1815

2026-04-12

1208人浏览

原创

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

autohotkey怎么使用pixelgetcolor取色 autohotkey如何用脚本获取屏幕指定坐标位置的颜色值【脚本】

如果您希望在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实现随鼠标移动实时取色,适用于调试或颜色识别场景。

TraeCode
TraeCode

TraeCode是一款面向中文开发场景的AI原生编程工具。

下载

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。

相关专题

更多
java中break的作用
java中break的作用

本专题整合了java中break的用法教程,阅读专题下面的文章了解更多详细内容。

2025.10.15

2540

7

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

2025.10.24

727

6

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.03

1678

5

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.04

2524

5

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

2023.10.24

5964

49

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

2023.11.24

5389

6

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

2024.03.22

7074

16

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

2024.04.29

10054

11

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

2025.07.29

5119

17

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习