按键精灵大漠插件使用教程
目录
-
第一部分:准备工作
- 什么是大漠插件?
- 为什么使用大漠插件?
- 环境配置:安装按键精灵和大漠插件
- 第一个脚本:如何启动大漠插件并绑定窗口
-
第二部分:核心概念与基础命令
dm.SetPath:设置插件路径(必须)dm.Bind:绑定目标窗口(必须)dm_ret = dm.Ocr:文字识别(核心功能)dm_ret = dm.FindPic:图片查找(核心功能)- 坐标系统:屏幕坐标 vs 窗口坐标
-
第三部分:实战演练
- 简单的文字识别与点击
目标:识别窗口中的“开始游戏”文字并点击它。
- 图片查找与鼠标操作
目标:在窗口中查找一张“登录”按钮的图片,找到后点击。
- 组合应用:找图后找字
目标:先找到某个图标,然后在该图标附近寻找特定文字。
- 简单的文字识别与点击
-
第四部分:进阶技巧与常用命令
- 图色命令:
FindPic,FindStr,FindStrFast,FindColor - 鼠标命令:
MoveTo,LeftClick,RightClick,Drag - 键盘命令:
KeyPress,SendString - 窗口命令:
FindWindow,GetWindowRect - 高级技巧:使用
pic参数、模糊识别、区域截图
- 图色命令:
-
第五部分:调试与排错
TracePrint:你的好朋友- 常见错误及解决方案
- 如何优化脚本性能
第一部分:准备工作
什么是大漠插件?
大漠插件(dm.dll)是一个第三方插件,它为按键精灵提供了强大的图色识别能力,按键精灵自身只能模拟鼠标键盘,无法“看”到屏幕上有什么,而大漠插件就像给按键精灵装上了一双眼睛,让它能够:
- 识别文字:在指定区域内查找特定的文字。
- 识别图片:在指定区域内查找一张图片(截图)。
- 识别颜色:在指定坐标查找特定颜色。
- 获取窗口信息:获取窗口句柄、大小、位置等。
没有大漠插件,按键精灵就是个“盲人”操作员;有了它,就成了一个“眼明手快”的操作员。
为什么使用大漠插件?
- 高稳定性:基于图色识别,不依赖窗口的标题或类名,即使窗口被遮挡或最小化后还原,也能稳定识别。
- 通用性强:适用于几乎所有游戏和应用,无论是窗口化还是全屏。
- 功能强大:支持文字、图片、颜色等多种识别方式,能满足绝大多数自动化需求。
环境配置
- 下载软件:
- 按键精灵:从官网下载并安装最新版。
- 大漠插件:从大漠官网下载最新版的
dm.dll文件。
- 放置插件:
- 将下载的
dm.dll文件复制到按键精灵的插件目录中。 - 路径通常是:
X:\Program Files (x86)\按键精灵\plugin(X为你的安装盘符)。
- 将下载的
- 在按键精灵中加载插件:
- 打开按键精灵编辑器。
- 点击顶部菜单的 “插件” -> “插件管理”。
- 在列表中找到 “大漠”,确保它被勾选,如果没有,点击“添加”并找到
dm.dll文件。 - 确认后,大漠插件就已经成功加载了。
第一个脚本:启动并绑定窗口
这是所有大漠脚本的第一步,也是必须的一步。
// 1. 设置大漠插件所在路径
// 注意:如果你的dm.dll在plugin目录下,这步可以省略,但为了通用性,建议加上。
dm.SetPath "plugin\dm.dll"
// 2. 查找并绑定目标窗口
// 假设我们要绑定的窗口标题是“我的游戏”
hwnd = dm.FindWindow("", "我的游戏")
// 3. 检查是否成功绑定
If hwnd = 0 Then
TracePrint "错误:找不到窗口标题为'我的游戏'的窗口!脚本退出。"
// 使用 ExitScript 语句可以立即停止脚本运行
ExitScript
Else
TracePrint "成功找到窗口,句柄为:" & hwnd
// 使用 dm.Bind 绑定窗口,后续所有操作都基于这个窗口
dm.Bind hwnd
TracePrint "窗口绑定成功!"
End If
// ... 在这里添加你的自动化代码 ...
TracePrint "脚本执行完毕!"
解释:
dm.SetPath:告诉按键精灵去哪里找dm.dll。dm.FindWindow("", "窗口标题"):通过窗口标题来查找窗口,第一个参数是窗口类名,一般不用可以留空。hwnd:返回的是窗口的唯一标识符(句柄)。If hwnd = 0 Then ... Else ...:判断是否找到窗口,如果没找到就报错并退出,这是良好的编程习惯。dm.Bind hwnd:至关重要的一步,将我们的操作锁定到这个窗口上,这样后续的坐标、截图等操作才不会出错。
第二部分:核心概念与基础命令
dm.SetPath:设置插件路径
如上所述,必须在使用任何大漠命令前执行。
dm.Bind:绑定目标窗口
同样,在执行图色识别前必须绑定窗口。
dm_ret = dm.Ocr:文字识别
这是识别文字的核心命令。
语法:
result = dm.Ocr(x1, y1, x2, y2, "字库文件路径", "匹配选项")
x1, y1, x2, y2:识别的矩形区域坐标(左上角和右下角)。"字库文件路径":大漠需要知道你要识别哪些字,你需要创建一个字库文件(通常是.ch或.rec文件)。"匹配选项":"0"表示精确匹配,"1"表示模糊匹配。
返回值:
result 是一个字符串,格式为:x,y,识别出的文字,如果找不到,则返回空字符串。
如何创建字库? 按键精灵自带了“字库管理器”。
- 在按键精灵编辑器中,点击 “工具” -> “字库管理器”。
- 点击“新建”。
- 使用鼠标在屏幕上拖动,框选你想要识别的文字,或者手动输入文字。
- 保存字库文件,
myfont.ch。
dm_ret = dm.FindPic:图片查找
这是识别图片的核心命令,也是最常用的。
语法:
result = dm.FindPic(x1, y1, x2, y2, "图片文件路径", "偏差值", "指定颜色")
x1, y1, x2, y2:查找的区域。"图片文件路径":你要查找的图片(截图),通常是.bmp或.png格式。"偏差值":颜色匹配的容差。"0"是完全匹配,"1000"是最大偏差,一般设置为"0"或"10"。"指定颜色":高级用法,可以只查找图片中特定颜色的部分,通常留空 。
返回值:
result 是一个字符串,格式为:x,y,如果找不到,则返回 -1,-1。
坐标系统
- 屏幕坐标:相对于整个屏幕左上角 (0,0) 的坐标。
- 窗口坐标:相对于窗口客户区左上角 (0,0) 的坐标。
当你使用 dm.Bind 绑定窗口后,所有的大漠图色命令(如 FindPic, Ocr)默认使用窗口坐标,这非常方便,因为窗口移动或分辨率改变时,脚本依然有效。
第三部分:实战演练
简单的文字识别与点击
目标:识别窗口中的“开始游戏”文字,然后点击它。
// 准备工作
dm.SetPath "plugin\dm.dll"
hwnd = dm.FindWindow("", "我的游戏")
If hwnd = 0 Then ExitScript
dm.Bind hwnd
// 假设我们创建的字库文件是 myfont.ch,存放在脚本同目录
fontPath = ThisScriptPath & "myfont.ch"
// 1. 在窗口内识别文字
// 假设“开始游戏”按钮在窗口中央区域 (100,100,500,300)
ret = dm.Ocr(100, 100, 500, 300, fontPath, "0")
// 2. 判断是否识别成功
If ret <> "" Then
// ret 的格式是 "x,y,开始游戏"
// 使用 Split 函数分割字符串,获取坐标
pos = Split(ret, ",")
click_x = pos(0)
click_y = pos(1)
TracePrint "找到文字'开始游戏',坐标为:" & click_x & ", " & click_y
// 3. 移动鼠标并点击
dm.MoveTo click_x, click_y
dm.LeftClick 1
TracePrint "已点击'开始游戏'按钮。"
Else
TracePrint "未找到'开始游戏'文字。"
End If
图片查找与鼠标操作
目标:查找一张“登录”按钮的图片并点击。
// 准备工作
dm.SetPath "plugin\dm.dll"
hwnd = dm.FindWindow("", "我的游戏")
If hwnd = 0 Then ExitScript
dm.Bind hwnd
// 1. 定义要查找的图片路径
// 假设你用截图工具截取了“登录”按钮的图片,保存为 login.bmp
picPath = ThisScriptPath & "login.bmp"
// 2. 在整个窗口内查找图片
// 使用 dm.GetWindowRect 获取窗口的实际坐标范围
rect = dm.GetWindow(hwnd)
window_rect = Split(rect, "|")
x1 = window_rect(0)
y1 = window_rect(1)
x2 = window_rect(2)
y2 = window_rect(3)
ret = dm.FindPic(x1, y1, x2, y2, picPath, "0", "")
// 3. 判断是否找到
If ret <> "-1,-1" Then
// ret 的格式是 "x,y"
pos = Split(ret, ",")
click_x = pos(0)
click_y = pos(1)
TracePrint "找到'登录'按钮图片,坐标为:" & click_x & ", " & click_y
// 4. 点击
dm.MoveTo click_x, click_y
dm.LeftClick 1
TracePrint "已点击'登录'按钮。"
Else
TracePrint "未找到'登录'按钮图片。"
End If
组合应用:找图后找字
目标:先找到“角色列表”的图标,然后在该图标下方寻找“战士”这个文字。
// 准备工作
dm.SetPath "plugin\dm.dll"
hwnd = dm.FindWindow("", "我的游戏")
If hwnd = 0 Then ExitScript
dm.Bind hwnd
// 字库和图片路径
fontPath = ThisScriptPath & "myfont.ch"
iconPath = ThisScriptPath & "icon_rolelist.bmp"
// 1. 先找到“角色列表”图标
ret = dm.FindPic(0, 0, 1024, 768, iconPath, "0", "")
If ret <> "-1,-1" Then
pos = Split(ret, ",")
icon_x = pos(0)
icon_y = pos(1)
TracePrint "找到'角色列表'图标,坐标:" & icon_x & ", " & icon_y
// 2. 定义在图标下方寻找文字的区域
// 假设文字在图标下方 20 到 120 像素的范围内
search_x1 = icon_x - 50
search_y1 = icon_y + 20
search_x2 = icon_x + 50
search_y2 = icon_y + 120
// 3. 在该区域内寻找“战士”
ret_text = dm.Ocr(search_x1, search_y1, search_x2, search_y2, fontPath, "0")
If InStr(ret_text, "战士") > 0 Then
TracePrint "在'角色列表'图标下方找到了'战士'!"
// ... 可以在这里添加点击“战士”的操作 ...
Else
TracePrint "未找到'战士'。"
End If
Else
TracePrint "未找到'角色列表'图标,无法继续。"
End If
第四部分:进阶技巧与常用命令
FindStrFast:比Ocr速度更快,但识别率稍低,适合对速度要求高,文字比较规整的场景。FindColor/FindColorMulti:用于查找特定颜色,常用于识别血条、蓝条等。GetColor:获取指定坐标点的颜色值,可用于判断或校验。dm.MoveTo,dm.LeftClick,dm.RightClick:鼠标移动和点击。dm.KeyPress:模拟按键,dm.KeyPress "A"。dm.SendString "Hello"用于输入一串文字。dm.GetWindowRect(hwnd):获取窗口的屏幕坐标,用于确定查找范围。dm.Capture:截取窗口或屏幕的图片并保存,方便制作查找用的素材。pic参数:在FindPic中,可以指定只查找图片中非透明色的部分,大大提高准确率。dm.FindPic(..., "000000", "0", "000000")表示只查找图片中黑色背景的部分。
第五部分:调试与排错
TracePrint:你的好朋友
在脚本的任何地方使用 TracePrint "你想输出的信息",信息会显示在按键精灵的调试窗口中,这是定位问题、查看变量值、理解脚本执行流程的最重要工具。
常见错误及解决方案
-
错误1:
-1或空字符串- 原因:
FindPic或Ocr没有找到目标。 - 解决方案:
- 区域是否正确? 用
TracePrint输出你的查找区域坐标,确保它覆盖了目标。 - 素材是否正确?
- 图片:截图是否干净?是否包含了太多背景?可以尝试使用
pic参数,图片的缩放比例是否和游戏里的一致? - 文字:字库是否包含了你要识别的文字?游戏中的字体是否特殊(如艺术字)导致识别率低?
- 图片:截图是否干净?是否包含了太多背景?可以尝试使用
- 偏差值是否太小? 尝试将
FindPic的偏差值从"0"调整到"10"或更高。 - 窗口是否正确? 确保你已经成功
Bind了正确的窗口。
- 区域是否正确? 用
- 原因:
-
错误2:点击位置不准确
- 原因:识别出的坐标点不是你想要点击的位置。
- 解决方案:
- 使用
TracePrint输出识别出的坐标,然后用鼠标移动到那个位置看是否正确。 - 图片识别的坐标通常是图片的左上角,如果你希望点击图片中心,可以在代码中加上偏移量:
x + 图片宽度/2, y + 图片高度/2。
- 使用
-
错误3:脚本运行慢
- 原因:查找区域过大,或者使用了较慢的识别方法(如
Ocr)。 - 解决方案:
- 缩小查找区域:尽量精确地定义你需要查找的小范围。
- 使用更快的命令:能用
FindPic就不用Ocr,能用FindStrFast就不用Ocr。 - 增加延时:在循环中适当加入
Delay 100(延时100毫秒),避免CPU占用过高。
- 原因:查找区域过大,或者使用了较慢的识别方法(如
如何优化脚本性能
- 精确查找区域:这是最重要的优化。
- 使用高精度截图:截图时关闭不必要的特效,保证截图清晰。
- 合理安排逻辑顺序:先找大范围的、容易找到的东西,再在其附近找小范围的、难找的东西,先找到主界面,再在主界面里找按钮。
- 利用循环和判断:让脚本更智能,而不是死板的“执行-等待-执行”。
大漠插件是按键精灵的灵魂,掌握它的核心在于:
- 绑定窗口:一切操作的前提。
- 理解坐标:知道你在哪里找。
- 用好素材:高质量的截图和字库是成功的关键。
- 勤用调试:
TracePrint是你最好的朋友。
多练习,多尝试,从简单的找图、找字开始,逐步组合成复杂的自动化流程,祝你玩得开心!
