autohotkey-大漠插件

大漠插件如何注册?

点击这个bat文件即可,

若是成功的话会显示

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

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

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

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

#SingleInstance force			;;执行程序前先关闭程序

dm:=ComObjCreate("dm.dmsoft") ;此处:=表示表达式返回值赋值给变量dm
ver := dm.ver() ;调用大漠的插件版本查询函数,只会出现两种情况返回值为空及返回值为版本号。

if (ver) ;如果版本号存在
MsgBox,,,注册成功!版本号为%ver%,1
else 
MsgBox,,,注册失败!`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%,1
return 

初始化配置

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

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

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

hwnd_2 :=dm.FindWindowex(hwnd_1,"Edit","")		;获得次级窗口的句柄,第一个参数为父级句柄,第二个为窗口类名,第三个为窗口标题
msgbox, , ,次级句柄为`:%Hwnd_2%,1
return 

如何绑定窗口

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.5
msgbox, % "图片位于:" 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.5
msgbox, % "颜色位于:" 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.5
msgbox, % "文字位于:" x[] "," y[]
dm.moveto(x[],y[])

Return  

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

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

#w::		;;找字

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

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

x:=ComVar()
y:=ComVar()
state := dm.FindStr(0,0,2000,2000,"我的主页","ffffff-000000",0.95,x.ref,y.ref)
msgbox,, ,找到的文字状态为`:%state%,0.5
msgbox, % "文字位于:" 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.Unbindwindow

return

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值