大漠插件如何注冊?
點選這個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