打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
autohotkey-大漠插件如何注册?
userphoto

2022.10.16 河北

关注

大漠插件如何注册?

作者:我真的爱发明https://blog.csdn.net/u014723479/article/details/104122700

点击这个bat文件即可,

若是成功的话会显示

大漠插件为什么一直注册不成功?

1.大漠插件不支持64位,autohotkey应该使用32位的

2.注意应该将ahk文件和大漠的dm.dll文件放到同一个文件夹下面才可以。

如何用程序验证大漠插件是否注册成功?

#SingleInstance force			;;执行程序前先关闭程序dm:=ComObjCreate("dm.dmsoft") ;此处:=表示表达式返回值赋值给变量dmver := dm.ver() ;调用大漠的插件版本查询函数,只会出现两种情况返回值为空及返回值为版本号。if (ver) ;如果版本号存在MsgBox,,,注册成功!版本号为%ver%,1elseMsgBox,,,注册失败!`n请检查ahk版本及大漠是否已注册到系统`n请参考大漠接口说明-常见问题-创建对象失败怎么办,4

大漠插件控制鼠标移动一定位置?

以下程序均建立在大漠插件已经正常安装好了的前提下

#k::		;;dm.MoveR(100,100)Return

得到当前鼠标所在的位置

!k::		;;x:=ComVar()y:=ComVar()dm.GetCursorPos(x.ref,y.ref)x :=x[]y :=y[]msgbox,%x% ,%y%Return

控制鼠标移动到特定的坐标处

dm.MoveTo(100,100)

获取鼠标输在的窗口句柄

#a::Hwnd:=dm.getmousepointwindow() ;获取鼠标所在的窗口句柄msgbox, , , %Hwnd%,1return

初始化配置

a:=dm.SetPath("") ;设置路径,若为空的话是设置为当前路径b:= dm.SetDict(0,"zk.txt")  ;设置字库文件

通过窗口类名和窗口标题获得句柄

#s::hwnd_1 := dm.FindWindow("Notepad","无标题 - 记事本") ;获得顶层窗口的句柄,第一个参数为窗口类名,第二个为窗口标题msgbox, , ,顶级句柄为`:%Hwnd_1%,1hwnd_2 :=dm.FindWindowex(hwnd_1,"Edit","")		;获得次级窗口的句柄,第一个参数为父级句柄,第二个为窗口类名,第三个为窗口标题msgbox, , ,次级句柄为`:%Hwnd_2%,1return

如何绑定窗口

state := dm.bindwindow(hwnd,"normal","normal","normal",0)  ;绑定窗口if state = 1	MsgBox,,,绑定成功!,0.5

 第一个参数为:指定的窗口句柄。

第一个参数为:屏幕颜色获取方式。

第一个参数为:鼠标仿真模式。

第一个参数为:键盘仿真模式。

第一个参数为:大漠窗口的绑定模式。

如何解绑窗口

dm.Unbindwindow

如何截图

若是设置了大漠的工作路径的话,就会将截图放到对应的工具文件夹,若是没有设置的话,则会放到当前路径下。

dm_ret := dm.Capture(0,0,2000,2000,"screen.bmp")

Capture(x1, y1, x2, y2, file)

x1 整形数:区域的左上X坐标
y1 整形数:区域的左上Y坐标
x2 整形数:区域的右下X坐标
y2 整形数:区域的右下Y坐标
file 字符串:保存的文件名,保存的地方一般为SetPath中设置的目录

     当然这里也可以指定全路径名。

用鼠标拖动截图

如何找图片

long FindPic(x1, y1, x2, y2, pic_name, delta_color,sim, dir,intX, intY)
state := dm.FindPic(0,0,2000,2000,"0.bmp|1.bmp|2.bmp","050505",0.5,0,x,y)

pic_name: 字符串:图片名,可以是多个图片,比如"0.bmp|1.bmp|2.bmp"

delta_color:颜色色差为"203040"表示RGB的色偏分别为 20 30 40(这里是16进制表示)

sim:相似度,取值范围是0.1-1.0

dir:查找方向,0:从左到右,从上到下,1:从左到右,从下到上,2:从右到左,从上到下3:从右到左,从下到上

IntX:变参指针,返回图片左上角的X坐标

IntY:变参指针,返回图片左上角的Y坐标

返回值为找到的图片的序号,从0开始索引,如果没找到返回-1.也就是说,只要返回值不为-1,就一定是匹配上了。

不过上面的这段代码在易语言下面可以运行,但是autohotkey下面是不可以运行成功的。

得加一个函数。

ComVar(Type=0xC){	static base := { __Get: "ComVarGet", __Set: "ComVarSet", __Delete: "ComVarDel" }	; 创建含 1 个 VARIANT 类型变量的数组.  此方法可以让内部代码处理	; 在 VARIANT 和 AutoHotkey 内部类型之间的所有转换.	arr := ComObjArray(Type, 1)	; 锁定数组并检索到 VARIANT 的指针.	DllCall("oleaut32\SafeArrayAccessData", "ptr", ComObjValue(arr), "ptr*", arr_data)	; 保存可用于传递 VARIANT ByRef 的数组和对象.	return { ref: ComObjParameter(0x4000|Type, arr_data), _: arr, base: base }}ComVarGet(cv, p*) { ; 当脚本访问未知字段时调用.	if p.MaxIndex() = "" ; 没有名称/参数, 即 cv[]		return cv._[0]}ComVarSet(cv, v, p*) { ; 当脚本设置未知字段时调用.	if p.MaxIndex() = "" ; 没有名称/参数, 即 cv[]:=v		return cv._[0] := v}ComVarDel(cv) { ; 当对象被释放时调用.	; 必须进行这样的处理以释放内部数组.	DllCall("oleaut32\SafeArrayUnaccessData", "ptr", ComObjValue(cv._))}#z::		;;x:=ComVar()y:=ComVar();用大漠插件 查找指定区域内的图片 位图必须是24位色BMP格式state := dm.FindPic(0,0,2000,2000,"0.bmp|1.bmp|2.bmp","000000",0.3,0,X.ref,Y.ref)msgbox,, ,先找到的图片为`:%state%,0.5msgbox, % "图片位于:" X[] "," Y[]dm.moveto(x[],y[])Return

如何找色

和找图的方式是一样的

ComVar(Type=0xC){	static base := { __Get: "ComVarGet", __Set: "ComVarSet", __Delete: "ComVarDel" }	; 创建含 1 个 VARIANT 类型变量的数组.  此方法可以让内部代码处理	; 在 VARIANT 和 AutoHotkey 内部类型之间的所有转换.	arr := ComObjArray(Type, 1)	; 锁定数组并检索到 VARIANT 的指针.	DllCall("oleaut32\SafeArrayAccessData", "ptr", ComObjValue(arr), "ptr*", arr_data)	; 保存可用于传递 VARIANT ByRef 的数组和对象.	return { ref: ComObjParameter(0x4000|Type, arr_data), _: arr, base: base }}ComVarGet(cv, p*) { ; 当脚本访问未知字段时调用.	if p.MaxIndex() = "" ; 没有名称/参数, 即 cv[]		return cv._[0]}ComVarSet(cv, v, p*) { ; 当脚本设置未知字段时调用.	if p.MaxIndex() = "" ; 没有名称/参数, 即 cv[]:=v		return cv._[0] := v}ComVarDel(cv) { ; 当对象被释放时调用.	; 必须进行这样的处理以释放内部数组.	DllCall("oleaut32\SafeArrayUnaccessData", "ptr", ComObjValue(cv._))}#q::		;;x:=ComVar()y:=ComVar()state :=dm.FindColor(0,0,2000,2000,"df3f68-050505",0.9,0,x.ref,y.ref)msgbox,, ,找到的颜色状态为`:%state%,0.5msgbox, % "颜色位于:" x[] "," y[]dm.moveto(x[],y[])Return

如何找字

ComVar(Type=0xC){	static base := { __Get: "ComVarGet", __Set: "ComVarSet", __Delete: "ComVarDel" }	; 创建含 1 个 VARIANT 类型变量的数组.  此方法可以让内部代码处理	; 在 VARIANT 和 AutoHotkey 内部类型之间的所有转换.	arr := ComObjArray(Type, 1)	; 锁定数组并检索到 VARIANT 的指针.	DllCall("oleaut32\SafeArrayAccessData", "ptr", ComObjValue(arr), "ptr*", arr_data)	; 保存可用于传递 VARIANT ByRef 的数组和对象.	return { ref: ComObjParameter(0x4000|Type, arr_data), _: arr, base: base }}ComVarGet(cv, p*) { ; 当脚本访问未知字段时调用.	if p.MaxIndex() = "" ; 没有名称/参数, 即 cv[]		return cv._[0]}ComVarSet(cv, v, p*) { ; 当脚本设置未知字段时调用.	if p.MaxIndex() = "" ; 没有名称/参数, 即 cv[]:=v		return cv._[0] := v}ComVarDel(cv) { ; 当对象被释放时调用.	; 必须进行这样的处理以释放内部数组.	DllCall("oleaut32\SafeArrayUnaccessData", "ptr", ComObjValue(cv._))}#w::		;;找字x:=ComVar()y:=ComVar()state := dm.FindStr(0,0,2000,2000,"易语言","ffffff-05050",0.9,x.ref,y.ref)msgbox,, ,找到的文字状态为`:%state%,0.5msgbox, % "文字位于:" x[] "," y[]dm.moveto(x[],y[])Return

注意这个色偏移不能太大,也不能太小。太大的话是导致识别不准确,太小的话可能会因为意外情况而导致识别不到。

绑定窗口之后在一个窗口上面找字

#w::		;;找字Hwnd:=dm.getmousepointwindow() ;获取鼠标所在的窗口句柄msgbox,% Hwndstate := dm.bindwindow(hwnd,"normal","normal","normal",0)  ;绑定窗口MsgBox,,,绑定成功!,0.5x:=ComVar()y:=ComVar()state := dm.FindStr(0,0,2000,2000,"我的主页","ffffff-000000",0.95,x.ref,y.ref)msgbox,, ,找到的文字状态为`:%state%,0.5msgbox, % "文字位于:" x[] "," y[]dm.moveto(x[],y[]);~ dm.moveto(203,273)Return

百度云的enter键改为鼠标点击

enter::Hwnd:=dm.getmousepointwindow() ;获取鼠标所在的窗口句柄state := dm.bindwindow(hwnd,"normal","normal","normal",0)  ;绑定窗口x:=ComVar()y:=ComVar();用大漠插件 查找指定区域内的图片 位图必须是24位色BMP格式state := dm.FindPic(0,0,2000,2000,"登录.bmp","000000",0.3,0,X.ref,Y.ref)dm.moveto(x[],y[])dm.LeftClick()dm.Unbindwindowreturn
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
VB 调用大漠插件操作记事本实例
按键精灵-多线程多开例子
读取交易软件的内存
详解 EnumWindows 与 EnumWindowsProc
获取控制台的的句柄
通过句柄取所有子窗口句柄、标题、类名
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服