大漠插件常用问题解答

VB语法
1常见问题
1 LoadPic和FreePic什么时候调用
LoadPic是把指定的图片加载入插件内部缓存(内存),这样在调用FindPic等等所有和图片相关的函数时,都不需要再从文件加载图片,这样相当于加快了函数执行的效率.
FreePic是把加载入内部缓存(内存)的图片释放.
事实上,插件内部在你调用所有的和图片相关的函数,比如FindPic等函数后,会自动把你调用过的相关图片加入缓存(内存),就相当于你调用了LoadPic。所以如果不是对性能有太苛刻的要求,一般不需要调用LoadPic,除非有特别用途.

2 Regsvr32出现常见错误
部分精简GHOST系统有。原因是把系统DLL给精简掉导致的。
解决办法 开始->运行->Regsvr32 atl.dll 即可
0x8002801c:
系统没有关闭UAC. 主要在win7 vista 2008系统出现.
解决办法,手动关闭UAC或者regsvr32用管理员权限启动,或者调用RegDll的进程必须有管理员权限.
手动关闭UAC的方法
控制面版-用户帐号-更改用户帐户控制设置

3 VBS调用规范
大漠插件,建议大家用VBS的方式来调用,具体调用规范如下,两种方式可以结合使用

1.     无返回值的不能带括号 ,或者说无括号不能带返回值,例如

dm.FindStr 0,0,2000,2000,"长安","aaaaa-00000",1.0,intX,intY

dm.MoveTo intX,intY

dm.LeftClick

dm.SetPath "c:xxxx"

dm.SetDict 0,"test.txt"

dm.LoadPic "*.bmp"
等等,这些都是不需要返回值的,那么不需要加括号,当然,你也可以加括号,但是就必须遵循规则2
2.有返回值的必须带括号,或者说,有括号必须有返回值,例如
dm_ret = dm.FindStr(0,0,2000,2000,"长安","aaaaa-00000",1.0,intX,intY)
dm_ret = dm.MoveTo(intX,intY)
dm_ret = dm.LeftClick()
dm_ret = dm.SetPath("c:xxxx")
dm_ret = dm.SetDict(0,"test.txt")
dm_ret = dm.LoadPic("*.bmp")
有些函数,是必须有返回值的,那么就必须带括号,比如Ocr函数等

ss = dm.Ocr(0,0,2000,2000,"aaaaaa-000000",1.0)

4按键多线程调用插件
目前来讲,按键的多线程还不够成熟。 尽量少用。以下是在按键下使用多线程调用插件的一个示例.

// 注册部分我就省略了

Dim hwnd

Set dm = createobject("dm.dmsoft")
TracePrint dm.Ver()

// 主绑定(当然你也可以不要主绑定。直接在线程里绑定)
hwnd = dm.GetMousePointWindow()
dm_ret = dm.BindWindow(hwnd, "dx", "windows", "windows", 0)
TracePrint dm_ret

Id1 = BeginThread(测试线程)
Id2 = BeginThread(测试线程)

Do
Delay 2000
TracePrint "主线程"

Loop

// 这里必须用ExitScript 以免线程无法停止.
ExitScript



Sub 测试线程()

   Set dm = createobject("dm.dmsoft")
// 副绑定
dm_ret = dm.BindWindow(hwnd, "dx", "windows", "windows", 0)

   TracePrint dm_ret

   Do

      Delay 2000

      TracePrint "子线程"

   Loop

End Sub



Sub OnScriptExit()
   TracePrint "OnScriptExit"
   dm.UnBindWindow

End Sub


5本机文字识别正常 为什么别的机器识别不正常
这是一个很常见的问题,不同机器,由于系统的不同或者软件设置的差异,会导致文字颜色,字体等可能存在不同。



一般来说解决这个问题,以前的办法是这样,利用Capture函数,比如

dm_ret = dm.FindStr(0,0,2000,2000,"长安","ffffff-000000",1.0,x,y)
if x < 0 then
    dm_ret = dm.Capture(0,0,2000,2000,"screen.bmp")
end if
这样当找不到长安时,就会截图保存为screen.bmp,然后作者可以分析这个文件,来对自己的字库或者代码进行调节优化.



但这个办法有个延后性的问题,因为FindStr和Capture是两个操作,分别调用了两次截屏,所以可能会有稍许不一致的情况存在.



为了完完全全的对FindStr时,产生的截图进行分析,我们需要用到2.1131版本提供的两个函数。



CapturePre和EnableDisplayDebug.



那么代码如下

dm.EnableDisplayDebug 1
dm_ret = dm.FindStr(0,0,2000,2000,"长安","ffffff-000000",1.0,x,y)
if x < 0 then
    dm_ret = dm.CapturePre("screen.bmp")
end if

这样就把FindStr时的截图保存下来了,就完全恢复了现场. 因为CapturePre这个函数是截取上一次的截图数据.

6插件释放到Plugin里的要求
首先从理论上来说释放到任何目录都是没问题的



但是按键以及简单游或者小精灵的Plugin目录比较特殊

原因在于按键会自动把Plugin目录下的所有dll强行注册到系统(相当于调用了Regsvr32 *.dll)

而且按键还会自动为每个dll创建相对应的com对象,这样导致Plugin下的dll会被暂时锁定,

此时,如果再进行对此dll的注册,都会失败.



所以如果你释放插件到Plugin目录,那么导致的问题就是如果要进行插件升级,很可能就会失败,导致脚本错误.



所以我强烈建议大家养成好习惯,不要把dll释放到Plugin,自己手动注册最安全可靠.这样既利人又利己.



从2.1118B版本之后,大漠插件将禁止释放到Plugin目录,以避免一系列升级产生的BUG!
同时,也禁止用Plugin方式来调用插件,那个方式也是非常不安全的.
请大家严格按照vbs的语法来使用插件.

7 出现VBS错误的解决办法

出现这种问题,99%的原因是由于插件版本没有注册到系统导致,解决办法如下

1. 删除Plugin目录的dm.dll和dm_jdyou.dll (简单游的话直接删除bin目录)



2. 插件的释放路径不要释放到Plugin目录,改为c盘的某个目录,并且用RegDll来注册,如下
PutAttachment "c: est_game" ,"*.*"
PutAttachment ".Plugin" ,"RegDll.dll"
Call Plugin.RegDll.Reg("c: est_gamedm.dll")

3. 重新启动脚本即可

4. 如果这样还不行,尝试手动注册,手动在运行下,输入regsvr32 c: est_gamedm.dll,

如果这样还提示出错,那就是系统问题,重装干净安全的系统.

最好不要用ghost系统,很多ghost系统都是修改过系统文件的,很危险!

8出现坐标越界的解决办法

出现这种错误,一般是你的代码给插件传递的参数有明显的错误,帮助调试脚本很有用.

比如FindStr函数

dm_ret = dm.FindStr(20,0,10,100,"abc","000000-000000",1.0,x,y)

这样显然x1(20) >= x2(10) 这显然是错误的 

再比如

dm_ret = dm.FindStr(-2000,0,-1000,100,"abc","000000-000000",1.0,x,y)

这样显然x2小于0 这也是明显错误 不可能有这样的情况出现

等等类似的错误



如果不想显示这样的信息,可以调用插件的接口SetShowErrorMsg来屏蔽这些错误

比如

dm.SetShowErrorMsg 0

9对边缘模糊文字的识别
对于这个问题,问的人比较多



很多情况下,文字并不是我们想象的边缘锐利,而是有一定的渐变,这时,再去用普通的文字识别,误判的几率就很高



而且就算是加入了模糊度判定,还是可能会误判.



解决办法是,不要用文字识别,改用多点找色,或者是自己制作透明图,自己写算法来进行判别.



制作透明图,用我的工具就可以很方便快捷的制作出来,这样的准确率是最好的,效率也是最高的.

10后台绑定会对哪些接口有影响
由于后台绑定操作和一系列接口有关系,那么有哪些接口会有影响呢?



图色部分  文字识别部分,键鼠部分,以及答题接口的FapCapture会有影响,,这些接口的具体操作是根据绑定的具体参数而定的。



那么其它部分的接口完全没有影响,可独立操作.

11插件收费功能
目前插件大部分功能都是免费给大家使用,但下面这些功能是收费使用。(简单游平台无此限制,大部分功能上按键上无限制)  
紫色文字表示的功能在按键上是不支持的,仅仅支持简单游平台和付费用户.  按键平台要调用紫色文字标识的功能,必须配合Reg或者RegEx函数.

1.BindWindow和BindWindowEx 中的模式1 3 5 6 7. (强力绑定模式,并且可过部分检测)

2.BindWindow和BindWindowEx中的dx.mouse.cursor, (后台鼠标特征.)

3.BindWindowEx中的dx.public.fake.window.min和dx.public.disable.window.show (假最小化功能)

4.插件自我保护功能. (仅仅在简单游平台和付费用户开启.按键不支持) (收费插件会开启部分防检测功能)

5.AsmCall接口的多线程安全功能.(免费用户多线程会出现异常错误)

6.BindWindowEx中的dx.public.hide.dll. (插件隐藏功能)

7.EnumWindow和EnumWindowByProcess的属性32  (按窗口打开顺序枚举窗口)

8.EnableKeypadPatch , EnableKeypadSync和EnableMouseSync  (键鼠同步接口)

9.内存接口中的FindIntEx FindFloatEx FindDoubleEx FindStringEx FindDataEx (强力高速内存搜索接口,多线程)

10. DisableFontSmooth和CheckFontSmooth (系统文字平滑设置)

11. FaqSend和FaqPost中的request_type类型为3(双坐标)   (支持同时传递2个坐标,对于多坐标验证很有用)

12. SetDisplayAcceler 设置硬件加速级别.  (设置系统的D3D硬件加速级别,有些窗口需要关闭这个才可以后台)

13. FindWindowByProcess和FindWindowByProcessId  (可根据进程名或者进程ID来枚举窗口)

14. RunApp 加强模式运行程序. (有些窗口无法用普通模式运行,可以尝试这个。强力模式基本上没有运行不了的)

15. Delay 不会阻塞UI,不占用CPU的延时. (高级语言的延时函数,效果同按键的Delay.省CPU)

16. FindWindowSuper   (可查找任意窗口的函数)

17. FindPicMem FindPicMemE FindPicMemEx (内存找图)

18. SetDictMem (内存设置字库)

19. GetNetTimeSafe (安全获取网络时间)

20. ForceUnBindWindow (强制解除绑定,有些非常时刻需要)

21. ReadIniPwd,WriteIniPwd  (INI加密读写)

22. KeyPressStr   (用连续的按键来模拟文字输入)

23. FaqCaptureFromFile (答题时支持从文件中获取句柄信息)

24. DmGuard  (仅仅在简单游平台和付费用户开启.按键不支持)。 (部分窗口需要)

25. EnableRealMouse和EnableRealKeypad (模拟真实的鼠标和按键,可过部分检测)

26. BindWindowEx中的dx.public.active.api2 (部分窗口需要这个才可以后台)

27. BindWindowEx中的dx.public.input.ime以及SendStringIme  (强力输入接口,类似SendString, 但这个接口几乎可以支持任意窗口输入)

28. FoobarDrawLine (Foobar的画线接口)

29. BindWindowEx中的图色dx.graphic.3d.8  (D3D8的后台,部分窗口必须用这个才可以后台图色)

30. BindWindowEx中的dx.public.graphic.protect (仅仅在简单游平台和付费用户开启.按键不支持). (图色防检测,很有用)

31. BindWindowEx中的dx.keypad.raw.input和dx.mouse.raw.input (部分窗口必须指定这个才可以后台)

32. BindWindowEx中的图色dx.graphic.2d.2 (dx.graphic.2d的增强模式。部分窗口必须用这个才可以后台)

33. GetDmCount (获取当前进程DM对象数量)

34. SetMemoryHwndAsProcessId. (所有内存接口支持以进程ID来操作)

35. BindWindow和BindWindowEx的模式101和模式103. (仅仅在简单游平台和付费用户开启.按键不支持).  (超级绑定模式,更加安全,避免被恶意检测.)

36. BindWindowEx中的属性dx.public.anti.api. (仅仅在简单游平台和付费用户开启.按键不支持).  (突破部分窗口后台保护.)

37. BindWindowEx中的属性dx.mouse.input.lock.api2. (用于解决部分窗口在后台操作时,前台鼠标会移动的问题.) 

38. FindShape FindShapeE FindShapeEx (同按键的找形状)

39. FindStrS FindStrExS FindStrFastS  FindFastStrExS  FindPicS FindPicExS

40. BindWindowEx中的属性dx.public.memory. (突破部分窗口内存读写保护. 绑定成功即可读写.)

41. EnableFakeActive. (控制可以开启或者关闭后台假激活.此函数很少人用到.注意看函数说明.)

42. GetScreenDataBmp. (类似GetScreenData.不过此函数直接返回封装好的bmp格式的数据. 可直接用于二次开发.)

43. EnableMouseLockPosition. (解决部分窗口后台点击会影响到前台.)

44. BindWindowEx中的属性dx.mouse.input.lock.api3. (用于解决部分窗口在后台操作时,前台鼠标会移动的问题.)

45. BindWindowEx中的dx.public.km.protect (仅仅在简单游平台和付费用户开启.按键不支持). (dx键鼠防检测,很有用)

46. DecodeFile和EncodeFile. (用于文件加解密.)

47. BindWindowEx中的dx.public.prevent.block. (某些窗口使用绑定模式1 3 5 7 101 103可能会导致窗口卡死. 这个属性可以避免卡死.)


11如何保证注册码的安全
插件的注册码可以在Reg和RegEx中注册。

很多人直接把注册码以明文方式写在参数里,这实际上是很不安全的做法.



比较安全点的做法是把注册码加密。并且在传递给Reg或者RegEx前解密.

并且把Reg和RegEx这段代码用强壳来保护. 比如vmp等.



另外就是推荐使用RegEx来注册插件。可以在后台详细记录看到软件附加信息.

这样可以手动排查被破解的可能性.
12后台识别鼠标特征码
首先 后台鼠标特征码仅适用于按键和简单游平台



1.     先用大漠综合工具来获取前台鼠标特征码,如果前台无法获取到特征码,那么就无法获取后台鼠标特征码.

2.     然后用以下代码,来测试是否有鼠标特征码

set dm = createobject("dm.dmsoft")



TracePrint dm.Ver()





hwnd = dm.GetMousePointWindow()



dm_ret = dm.BindWindow(hwnd,"dx2","dx2","dx",0)



TracePrint dm_ret

dm.MoveTo 0,0

Delay 100

TracePrint dm.GetCursorShape()
// 下面这句是输出当前鼠标热点位置(同样支持后台)

TracePrint dm.GetCursorSpot()

dm_ret = dm.UnBindWindow()



  如果以上代码可以正常输出鼠标特征,那就可以确定支持后台鼠标特征.



要注意的是,要想正确获取后台鼠标特征,必须在dm.MoveTo或者MoveR命令之后,加入一定的延时,以等待后台获取到鼠标特征.



一点小经验分享,有些窗口在使用一次MoveTo 可能获取不到特征码需要多移动几次 比如

For 3

    dm.MoveTo 30,40

Next

Delay 100

TracePrint dm.GetCursorShape()




13配置沙盘后台绑定
沙盘后台绑定 只适用于版本2.1109之后的版本



具体方法



打开沙盘,配置-》编辑配置文件



在[GlobalSettings]这个类别下加入以下内容



OpenIpcPath=*check_hook_exist*

OpenIpcPath=*dx*

OpenIpcPath=*share*

OpenIpcPath=*Protected*



保存即可.



64位系统下必须安装64位沙盘,并且在沙盘设置->限制->降低管理员和超级用户组的权限中,去掉前面的勾. 每个沙盘都要如此设置.
14使用后台识别
// 下面是一个GDI后台识别的例子(只列举了OCR,其余函数类似)

hwnd = dm.GetForegroundWindow()
dm_ret = dm.GetClientSize(hwnd,screen_w,screen_h)
dm_ret = dm.SetDict(0,"C:Documents and SettingsAdministrator桌面1.txt")
dm_ret = dm.BindWindow(hwnd,"gdi","normal","normal",0)
s = dm.Ocr(0,0, screen_w, screen_h,"FEFB01-000000",1.0)
MessageBox s
15使用绝对路径设置字库
比如我想把我的字库放到c: est目录,那么代码如下:

PutAttachment "c: est","*.txt" 

dm_ret = dm.SetPath("c: est")
dm_ret = dm.SetDict(0,"dm_soft.txt")
16使用相对路径设置字库
比如我要把我的字库放在Res目录下,那么代码如下:

base_path = dm.GetBasePath()
dm_ret = dm.SetPath(base_path)
dm_ret = dm.SetDict(0,"dm_soft.txt")



注意,要保证你的dm.dll是在Res目录,否则上面这面这段代码将把路径设置在你系统中dm.dll所在的路径


17手动注册插件到系统
比如dm.dll放在c: est目录

那么开始->运行->cmd

在命令提示符下,输入cd c: est

再输入 regsvr32 dm.dll 即可,这样会提示插件已经注册到系统中.

需要注意的是,可能有别的作者把dm.dll释放到系统目录。这样优先注册的是系统目录的插件.

解决办法是加上绝对路径。比如

regsvr32 c: estdm.dll
18单脚本能操作多个窗口
经常有人问我这个问题,现在特别把这个方法说一下。



比如有3个窗口,需要在一个脚本内分别控制,以达到多开的目的.



如果用我的插件如何实现呢? 其实很简单



比如有3个窗口同时操作.



那么代码如下



// 三个句柄(这里随便写的值,自己更换)

Dim hwnd_all(3)

hwnd_all(0) = 11111

hwnd_all(1) = 22222

hwnd_all(2) = 33333

// 声明3个对象(有几个窗口声明几个)

Dim dm_all(3)

// 分别创建对象

Set dm_all(0) = createobject("dm.dmsoft")

Set dm_all(1) = createobject("dm.dmsoft")

Set dm_all(2) = createobject("dm.dmsoft")



// 声明公共对象,用于切换

Set dm = nothing
hwnd = 0



// 调试用,打印下版本,好习惯

TracePrint dm_all(0).Ver()



// 分别绑定窗口

For i = 0 To 2

   Call 切换对象(i)

   dm_ret = dm.BindWindow(hwnd, "dx", "dx", "dx", 0)

   // 检测返回值

   If dm_ret = 0 Then 

      MessageBox "绑定失败"

      EndScript

   End If

Next



// 分别设置路径字库等

For i = 0 To 2

   Call 切换对象(i)

   dm.SetPath "c: est"

   dm.SetDict 0,"test.txt"

Next



// 脚本主循环

Do

   For i = 0 To 2

      Call 切换对象(i)

      Call 打怪()

   Next

Loop





Sub 切换对象(index)

   Set dm = dm_all(index)
   hwnd = hwnd_all(index)

   // 如果还需要切换窗口也可以在这里操作

End Sub



Sub 打怪()

   dm_ret = dm.FindStr(0, 0, 200, 200, "怪物名字", "ffffff-000000", 1.0, x, y)

   If x > 0 Then 

      // 开始打怪

      // 以下省略,和单开一样的写法

   End If

End Sub



Sub OnScriptExit()

   // 分别解绑窗口

   For i = 0 To 2

      Call 切换对象(i)

      dm_ret = dm.UnBindWindow()

   Next

End Sub
19如何多线程下使用
多线程下使用插件是一个很复杂的问题.

一般来说使用多线程的目的,有2种目的。

情况1 用多个线程控制多个窗口的脚本运行(最常见的情况,通常用于多开).

情况2 用多个线程控制同一个窗口的脚本运行(通常用于监控信息,比如验证信息,或其他一些突发性的情况).



下面就对上面列出的各种情况,讲解如何在这些情况下,使用大漠插件

一  按键的多线程 (示例代码可以参考这里)

   情况1

1.     这种情况是最常见的情况,用大漠插件不用特别注意什么,每个窗口对应绑定一个大漠对象即可.

2.     这种情况下用多线程,其实和按键的重复多开一样的效果。

情况2

1.   这种情况就比较特殊了。要支持这种情况,必须使用插件(2.1117之后的版本).

2.   每个线程中,还是创建一个大漠对象,并绑定同一个窗口. 
另外,特别要注意,绑定的同个窗口的绑定模式必须完全一样。  第一个绑定的大漠对象称做主绑定,
后面的都叫做副绑定,副绑定不用解绑也可以,但是一旦主绑定接绑,那么所有的绑定都会失效.

3. 这种模式下,还有个问题要注意,因为毕竟是多线程,键鼠的操作都是异步的,那么很可能出现键鼠
   在多个线程中冲突的可能,这个问题没法解决,多线程势必会有这样的问题。只能建议少在子线程中
   做键鼠的操作.

4. 另外要注意的是,子线程的绑定操作一定要在主线程之后,也就是说BeginThread的调用一定要在主
   线程的BindWindow或者BindWindowEx之后进行.



二  其他高级语言的多线程 (高级语言模版大漠插件网站有下载)

   首先,要注意的是,大漠插件是仅支持com的STA线程模型,高级语言中使用大漠插件,必须使用STA模型。

   这样效率最高. MTA也可以,但是不同线程调用同个对象接口的同步必须自己完成.插件内部没有考虑这点.

   情况1

1.   这种情况是最常见的情况,用大漠插件不用特别注意什么,每个窗口对应绑定一个大漠对象即可.

情况2

1.   这种情况就比较特殊了。要支持这种情况,必须使用插件(2.1117之后的版本).

2.   每个线程中,还是创建一个大漠对象,并绑定同一个窗口. 
另外,特别要注意,绑定的同个窗口的绑定模式必须完全一样。  第一个绑定的大漠对象称做主绑定,
后面的都叫做副绑定,副绑定不用解绑也可以,但是一旦主绑定接绑,那么所有的绑定都会失效..

3. 这种模式下,还有个问题要注意,因为毕竟是多线程,键鼠的操作都是异步的,那么很可能出现键鼠
   在多个线程中冲突的可能,这个问题没法解决,多线程势必会有这样的问题。只能建议少在子线程中
   做键鼠的操作.

4. 另外,子线程在绑定时,一定要等到主线程绑定结束之后,再执行绑定,
   否则会引发不可预知的异常.

   

     比如vc如何设置当前线程模型为STA,只要在线程开始调用CoInitialize(NULL)一次即可. 
其他语言可能略有不同.



     下面是一个按键8,使用大漠多线程的一个例子,必须使用大漠插件v2.1129之后的版本
Set dm = createobject("dm.dmsoft")
TracePrint dm.Ver()

DimEnv hwnd

hwnd = dm.GetMousePointWindow()

// 主绑定一定要先绑定,后启动线程
dm_ret = dm.BindWindow(hwnd,"dx","dx","dx",0)

TracePrint dm_ret

// 开启3个线程
BeginThread 线程函数()
BeginThread 线程函数()
BeginThread 线程函数()

Do
   // 这里做主线程的事情
   Delay 1000
Loop

Sub OnScriptExit()
    // 这句只会在主线程结束时被调用到
    dm_ret = dm.UnBindWindow()
End Sub

Sub 线程函数()
    Set dm = createobject("dm.dmsoft")
    dm_ret = dm.BindWindow(hwnd,"dx","dx","dx",0)
    TracePrint "线程绑定结果:"&dm_ret
    Do
        // 这里做线程里需要做的事情
        Delay 1000
    Loop
End Sub

20如何知道我的后台模式
测试窗口的后台模式非常简单 

从颜色 鼠标 键盘三个 依次进行测试即可.



比如颜色,我们可以如下测试,其中的gdi模式你可以换成别的颜色模式,看哪种模式可以正常的后台截图,那么这个模式就是你的后台模式

截的到图我是放在了c:根目录(根据dm.SetPath指定的目录)

set dm = createobject("dm.dmsoft")
dm.SetPath "c:"
hwnd = dm.GetMousePointWindow()
dm_ret = dm.BindWindow(hwnd,"gdi","normal","normal",0)
dm_ret = dm.Capture(0,0,2000,2000,"screen.bmp")
dm_ret = dm.UnBindWindow()
EndScript



比如鼠标,其中的windows你可以换成其它模式,测试鼠标要注意,坐标点(100,100)要换成窗口里有意义的点,比如某个按钮等.

set dm = createobject("dm.dmsoft")
hwnd = dm.GetMousePointWindow()
dm_ret = dm.BindWindow(hwnd,"normal","windows","normal",0)
dm.MoveTo 100,100
Delay  100
dm.LeftClick
Delay  100
dm_ret = dm.UnBindWindow()
EndScript



比如键盘,其中的windows你可以换成其它模式.注意下面的按下的虚拟键盘码68要根据窗口换成有意义的按键.

set dm = createobject("dm.dmsoft")
hwnd = dm.GetMousePointWindow()
dm_ret = dm.BindWindow(hwnd,"normal","normal","windows",0)
dm.KeyPress 68
Delay  100
dm_ret = dm.UnBindWindow()
EndScript


21为什么不建议用plugin方式调用插件
原因还在于按键对于Plugin的实现方式。



由于我的插件的设计是一个dm对象对应一个窗口这样的模式来设计的。



但是如果用了Plugin方式,实际上按键内部只有一个对象,无论你开几个脚本,开几个线程都是如此。



那么在多开时,就会出现问题。



所以,如果没有特别需求,还是用标准的vbs方式来调用.





从2.1118B版本之后,大漠插件将禁止释放到Plugin目录,以避免一系列升级产生的BUG!
同时,也禁止用Plugin方式来调用插件,那个方式也是非常不安全的.
请大家严格按照vbs的语法来使用插件.


22为什么不能和别的后台插件混用

当绑定为DX键盘或者DX鼠标时,必须用大漠插件带的键盘和鼠标命令,不可以用别的插件来替代,

比如按键自带的后台插件或者自己用消息模拟等.



这样做的目的是为了避免一些兼容性的问题!
23为什么插件无法升级
两个可能

1.     插件被释放到了Plugin目录

2. 插件被释放到了系统目录,比如c:windows或者c:windowssystem32



针对可能2, 如果确实要释放到系统目录,那你必须把插件改名。比如xx.dll. 并且注册插件必须指定全路径。

否则直接调用我的那个"自动注册插件到系统.bat"是不能成功替换的.

注册时可以这样写

call regdll.reg("c:windowssystem32xx.dll")

regsvr32 c:windowssystem32xx.dll /s



解决办法是删除系统目录下的插件. 如果提示无法删除,就重启系统再删除。 
24为什么会有错误提示
因为你的程序或者你使用的第三方插件造成了系统资源泄漏. 从而导致我的插件内部出错.

解决办法,仔细检查你的程序,修复可能导致资源泄漏的语句,并去除第三方插件再尝试.
25为什么机器码是空的
调用进程没有管理员权限,一般出在vista win7 2008系统.



解决办法,让调用进程以管理员方式运行. 或者关闭系统uac
26为什么模糊识别的速度很慢
如果要使用模糊识别,最好不要使用系统生成的那种很大的字库,否则速度会很慢.
可以自己建立字库,字库数量在1000以下,速度可以控制在1s左右. 
当然如果没有必要模糊识别,最好把模糊度设置为1.0 ,这样的速度是最快的。
如果非要使用系统字库,可以考虑采用多字库. 



注意,本插件文字识别的速度是建立在模糊度为1.0的基础上 模糊度小于1都会

极大的降低识别效率。请谨慎使用. 因为文字识别要求精准,一般没人用模糊识别,

比如"王"和"玉" 就差一个点,使用模糊就会导致识别失误。 所以大家还是尽量用

1.0的精准识别。
27为什么一绑定窗口就崩溃
使用图色模式dx.graphic.3d时,和多玩的YY语音有冲突. 不可在开着YY语音的情况下开启窗口. 否则会出现绑定失败并出现窗口崩溃的问题.

某些窗口的设置里可以直接关闭YY语音。(YY画中画). 

28为什么有时候按键和鼠标会点击无效
这个问题很常见,一般是因为窗口内部对于鼠标和键盘的响应时间有所要求导致。

一般来说,后台的键盘鼠标的按下和弹起的延时要比前台小很多,目的是为了加速执行效率。

解决这问题也很简单,加大按下和弹起的中间延时就可以解决。

如键盘
SetKeypadDelay

鼠标
SetMouseDelay

具体可以参考这2个函数的说明.

29 标准的插件注册和绑定的例子
这里只以按键8作为例子,其它语言都类似。



// 首先打包dm.dll和RegDll.dll到附件,当然如果你还有其它资源(字库,图片等)也可以一并打包



// 这个need_ver作为本脚本需要使用的插件版本. 如果要换插件时,记得更改这个值.

need_ver = "3.1210B"



// 释放附件>>>>>>>>>>>>>>>>>>>

// 这里选择c盘的test _game作为插件的基本目录 也就是SetPath对应的目录。所以所有资源都释放在此目录.

PutAttachment "c: est_game","*.*"

// 这里要用到RegDll来注册插件,所以必须释放到Plugin. 但是切记不能把dm.dll释放到Plugin.那会导致插件失效.

PutAttachment ".Plugin" ,"RegDll.dll"



// 插件注册开始>>>>>>>>>>>>>>>>>>>

// 下面开始注册插件,先尝试用RegDll来注册.这里必须使用绝对路径。以免有别人把dm.dll释放在系统目录.造成版本错误.

Call Plugin.RegDll.Reg("c: est_gamedm.dll") 



// 这里判断是否注册成功

set dm = createobject("dm.dmsoft")

ver = dm.Ver()

if ver <> need_ver then

// 先释放先前创建的dm

set dm = nothing

   // 再尝试用regsvr32 来注册. 这里必须使用绝对路径。以免有别人把dm.dll释放在系统目录.造成版本错误.

set ws=createobject("Wscript.Shell")
ws.run "regsvr32 c: est_gamedm.dll /s"
set ws=nothing
Delay 1500  



// 再判断插件是否注册成功

set dm = createobject("dm.dmsoft")

ver = dm.Ver()

if ver <> need_ver then

// 这时,已经确认插件注册失败了。 弹出一些调试信息,以供分析.

messagebox "插件版本错误,当前使用的版本是:"&ver&",插件所在目录是:"&dm.GetBasePath()

messagebox "请关闭程序,重新打开本程序再尝试"

    endscript

  end if

end if

// 插件注册结束<<<<<<<<<<<<<<<



// 收费注册开始,简单游作者不需要这一段(加了也没关系,不会扣费),非简单游平台付费作者必须添加>>>>>>>>>>>>>>>

// 当然,如果是在按键精灵上使用,这段代码是可以注释掉。大部分功能可以直接在按键平台使用。无须注册.

// ok,这里已经确认插件注册成功,并且创建了对象,下面开始注册收费服务

dm_ret = dm.RegEx("abcdefg","0001") // abcdefg是您的注册码. 在大漠插件网站后台可以直接获取.

if dm_ret <> 1 then

   messagebox "注册失败,返回值是:"&dm_ret

   endscript

end if

// 收费注册结束<<<<<<<<<<<<<<<<



//这里设置插件基本目录

dm.SetPath "c: est_game"



// 获取句柄

hwnd = dm.GetMousePointWindow()



// 绑定

dm_ret = dm.BindWindow(hwnd,"dx","dx","dx",0)



// 检测绑定返回值

if dm_ret = 0 then

   last_error = dm.GetLastError()

// 如果是WIN7 VISTA WIN2008系统,检测当前系统是否有开启UAC
   if dm.GetOsType() = 3 then

    // 有开启UAC的话,尝试关闭

if dm.CheckUAC() = 1 then

     if dm.SetUAC(0) = 1 then

          // 关闭UAC之后,必须重启系统才可以生效

          messagebox "已经关闭系统UAC设置,必须重启系统才可以生效。点击确定重启系统"

         dm.ExitOs 2
                 Delay 2000

         endscript

     end if

end if
   end if

   // 具体错误码的含义,可以参考函数GetLastError的说明.

   messagebox "绑定失败,错误码是:"&last_error
   messagebox "如果确定关闭了UAC,很可能是系统的防火墙拦截插件,请暂时关闭360等安全防火墙再尝试"

   endscript

end if





// 下面就是脚本部分了 省略





// 下面这是脚本结束时执行的部分

Sub OnScriptExit()

   dm.UnBindWindow

End Sub



// 结束



另外特别要注意,不要把dm.dll释放到Plugin目录,那样会导致插件在
更新版本时出现注册失败的情况。特别是在简单游平台.建议释放到C盘的
某个目录比如Test目录等.



另外,别的高级语言如何调用dm.dll,请百度XXXX语言如何调用Active X 对象. 

目前经过测试的语言可以正常调用的有vc6 vb6 delphi 易,别的语言想必也不会有问题.



从2.1118B版本之后,大漠插件将禁止释放到Plugin目录,以避免一系列升级产生的BUG!
同时,也禁止用Plugin方式来调用插件,那个方式也是非常不安全的.
请大家严格按照vbs的语法来使用插件.



如果是多线程使用大漠插件,必须每个线程都要创建一个dm对象.

注册过程脚本开始时,执行一次就行了,没必要每个线程都执行.


foolbar工具栏
CreateFoobarCustom
函数简介:

根据指定的位图创建一个自定义形状的窗口

函数原型:

long CreateFoobarCustom(hwnd,x,y,pic_name,trans_color,sim) 

参数定义:

hwnd 整形数: 指定的窗口句柄,如果此值为0,那么就在桌面创建此窗口

x 整形数: 左上角X坐标(相对于hwnd客户区坐标)

y 整形数: 左上角Y坐标(相对于hwnd客户区坐标)

pic_name 字符串: 位图名字

trans_color 字符串: 透明色(RRGGBB)

sim 双精度浮点数: 透明色的相似值 0.1-1.0

返回值:

整形数 : 创建成功的窗口句柄

示例:

foobar = dm.CreateFoobarCustom(hwnd,10,10,"菜单.bmp","FF00FF",1.0)

CreateFoobarEllipse

函数简介:

创建一个椭圆窗口

函数原型:

long CreateFoobarEllipse(hwnd,x,y,w,h) 

参数定义:

hwnd整形数: 指定的窗口句柄,如果此值为0,那么就在桌面创建此窗口

x整形数: 左上角X坐标(相对于hwnd客户区坐标)

y整形数: 左上角Y坐标(相对于hwnd客户区坐标)

w整形数: 矩形区域的宽度

h整形数: 矩形区域的高度

返回值:

整形数 : 创建成功的窗口句柄

示例:

foobar = dm.CreateFoobarEllipse(hwnd,10,10,200,200)



CreateFoobarRect
函数简介:

创建一个矩形窗口

函数原型:

long CreateFoobarRect(hwnd,x,y,w,h) 

参数定义:

hwnd整形数: 指定的窗口句柄,如果此值为0,那么就在桌面创建此窗口

x整形数: 左上角X坐标(相对于hwnd客户区坐标)

y整形数: 左上角Y坐标(相对于hwnd客户区坐标)

w整形数: 矩形区域的宽度

h整形数: 矩形区域的高度

返回值:

整形数 : 创建成功的窗口句柄

示例:

foobar = dm.CreateFoobarRect(hwnd,10,10,200,200)

CreateFoobarRoundRect
函数简介:

创建一个圆角矩形窗口

函数原型:

long CreateFoobarRoundRect(hwnd,x,y,w,h,rw,rh) 

参数定义:

hwnd整形数: 指定的窗口句柄,如果此值为0,那么就在桌面创建此窗口

x整形数: 左上角X坐标(相对于hwnd客户区坐标)

y整形数: 左上角Y坐标(相对于hwnd客户区坐标)

w整形数: 矩形区域的宽度

h整形数: 矩形区域的高度

rw整形数: 圆角的宽度

rh整形数: 圆角的高度

返回值:

整形数 : 创建成功的窗口句柄

示例:

foobar = dm.CreateFoobarRoundRect(hwnd,10,10,200,200,30,30)

FoobarClearText
函数简介:

清除指定的Foobar滚动文本区

函数原型:

long FoobarClearText(hwnd) 

参数定义:

hwnd整形数: 指定的Foobar窗口句柄,此句柄必须是通过CreateFoobarxxx创建而来

返回值:

整形数 :
0 : 失败

1 : 成功

示例:

dm_ret = dm.FoobarClearText(foobar)


FoobarClose
函数简介:

关闭一个Foobar,注意,必须调用此函数来关闭窗口,用SetWindowState也可以关闭,但会造成内存泄漏.

函数原型:

long FoobarClose(hwnd) 

参数定义:

hwnd整形数: 指定的Foobar窗口句柄

返回值:

整形数:
0: 失败

1: 成功

示例:

dm_ret = dm.FoobarClose(foobar)

FoobarDrawLine

函数简介:

在指定的Foobar窗口内部画线条.  <收费功能,具体详情点击查看>

函数原型:

long FoobarDrawLine(hwnd,x1,y1,x2,y2,color,style,width) 

参数定义:

hwnd 整形数: 指定的Foobar窗口,注意,此句柄必须是通过CreateFoobarxxxx系列函数创建出来的

x1 整形数: 左上角X坐标(相对于hwnd客户区坐标)

y1 整形数: 左上角Y坐标(相对于hwnd客户区坐标)

x2 整形数: 右下角X坐标(相对于hwnd客户区坐标)

y2 整形数: 右下角Y坐标(相对于hwnd客户区坐标)

color字符串: 填充的颜色值

style 整形数: 画笔类型. 0为实线. 1为虚线

width 整形数: 线条宽度. 

返回值:

整形数:
0 : 失败

1 : 成功

示例:

dm_ret = dm.FoobarDrawLine(foobar,0,0,200,200,"FF0000",1,1)

注:当style为1时,线条宽度必须也是1.否则线条是实线.


FoobarDrawPic
函数简介:

在指定的Foobar窗口绘制图像 此图片不能是加密的图片

函数原型:

long FoobarDrawPic(hwnd,x,y,pic_name,trans_color) 

参数定义:

hwnd整形数: 指定的Foobar窗口,注意,此句柄必须是通过CreateFoobarxxxx系列函数创建出来的

x整形数: 左上角X坐标(相对于hwnd客户区坐标)

y整形数: 左上角Y坐标(相对于hwnd客户区坐标)

pic_name字符串: 图像文件名

trans_color字符串: 图像透明色

返回值:

整形数 :
0 : 失败

1 : 成功

示例:

dm_ret = dm.FoobarDrawPic(foobar,0,0,"menu.bmp","FF0000")

FoobarDrawText

函数简介:

在指定的Foobar窗口绘制文字

函数原型:

long FoobarDrawText(hwnd,x,y,w,h,text,color,align) 

参数定义:

hwnd整形数: 指定的Foobar窗口,注意,此句柄必须是通过CreateFoobarxxxx系列函数创建出来的

x整形数: 左上角X坐标(相对于hwnd客户区坐标)

y整形数: 左上角Y坐标(相对于hwnd客户区坐标)

w整形数: 矩形区域的宽度

h整形数: 矩形区域的高度

text字符串: 字符串

color字符串: 文字颜色值

align 整形数: 取值定义如下

1 : 左对齐

2 : 中间对齐

4 : 右对齐

返回值:

整形数:
0 : 失败

1 : 成功

示例:

dm_ret = dm.FoobarDrawText(foobar,0,0,200,30,"测试","FF0000",1)

FoobarFillRect

函数简介:

在指定的Foobar窗口内部填充矩形

函数原型:

long FoobarFillRect(hwnd,x1,y1,x2,y2,color) 

参数定义:

hwnd 整形数: 指定的Foobar窗口,注意,此句柄必须是通过CreateFoobarxxxx系列函数创建出来的

x1 整形数: 左上角X坐标(相对于hwnd客户区坐标)

y1 整形数: 左上角Y坐标(相对于hwnd客户区坐标)

x2 整形数: 右下角X坐标(相对于hwnd客户区坐标)

y2 整形数: 右下角Y坐标(相对于hwnd客户区坐标)

color字符串: 填充的颜色值

返回值:

整形数:
0 : 失败

1 : 成功

示例:

dm_ret = dm.FoobarFillRect(foobar,0,0,200,200,"FF0000")

FoobarLock
函数简介:

锁定指定的Foobar窗口,不能通过鼠标来移动

函数原型:

long FoobarLock(hwnd) 

参数定义:

hwnd整形数: 指定的Foobar窗口句柄,此句柄必须是通过CreateFoobarxxx创建而来

返回值:

整形数:
0 : 失败

1 : 成功

示例:

dm_ret = dm.FoobarLock(foobar)

FoobarPrintText
函数简介:

向指定的Foobar窗口区域内输出滚动文字

函数原型:

long FoobarPrintText(hwnd,text,color) 

参数定义:

hwnd整形数: 指定的Foobar窗口句柄,此句柄必须是通过CreateFoobarxxx创建而来

text字符串: 文本内容

color字符串: 文本颜色

返回值:

整形数:
0 : 失败

1 : 成功

示例:

dm_ret = dm.FoobarPrintText(foobar,"大漠测试","ff0000")

// 用红色文字向滚动区域输出文字信息


FoobarSetFont
函数简介:

设置指定Foobar窗口的字体

函数原型:

long FoobarSetFont(hwnd,font_name,size,flag) 

参数定义:

hwnd整形数: 指定的Foobar窗口句柄,此句柄必须是通过CreateFoobarxxx创建而来

font_name字符串: 系统字体名,注意,必须保证系统中有此字体

size整形数: 字体大小

flag整形数: 取值定义如下

0 : 正常字体

1 : 粗体

2 : 斜体

4 : 下划线

文字可以是以上的组合 比如粗斜体就是1+2,斜体带下划线就是:2+4等.

返回值:

整形数:
0 : 失败

1 : 成功

示例:

dm_ret = dm.FoobarSetFont(foobar,"宋体",25,2+4)

FoobarTextLineGap
函数简介:

设置滚动文本区的文字行间距,默认是3

函数原型:

long FoobarTextLineGap(hwnd,line_gap) 

参数定义:

hwnd 整形数: 指定的Foobar窗口句柄,此句柄必须是通过CreateFoobarxxx创建而来

line_gap 整形数: 文本行间距

返回值:

整形数:
0 : 失败

1 : 成功

示例:

dm_ret = dm.FoobarTextLineGap(foobar,5)

FoobarTextPrintDir
函数简介:

设置滚动文本区的文字输出方向,默认是0

函数原型:

long FoobarTextPrintDir(hwnd,dir) 

参数定义:

hwnd 整形数: 指定的Foobar窗口句柄,此句柄必须是通过CreateFoobarxxx创建而来

dir 整形数: 0 表示向下输出

    : 1 表示向上输出

返回值:

整形数:
0 : 失败

1 : 成功

示例:

dm_ret = dm.FoobarTextPrintDir(foobar,1)

FoobarTextRect
函数简介:

设置指定Foobar窗口的滚动文本框范围,默认的文本框范围是窗口区域

函数原型:

long FoobarTextRect(hwnd,x,y,w,h) 

参数定义:

hwnd 整形数: 指定的Foobar窗口句柄,此句柄必须是通过CreateFoobarxxx创建而来

x 整形数: x坐标

y 整形数: y坐标

w 整形数: 宽度

h 整形数: 高度

返回值:

整形数:
0 : 失败

1 : 成功

示例:

dm_ret = dm.FoobarTextRect(foobar,10,10,100,200)


FoobarUnlock
函数简介:

解锁指定的Foobar窗口,可以通过鼠标来移动

函数原型:

long FoobarUnlock(hwnd) 

参数定义:

hwnd 整形数: 指定的Foobar窗口句柄,此句柄必须是通过CreateFoobarxxx创建而来

返回值:

整形数:
0 : 失败

1 : 成功

示例:

dm_ret = dm.FoobarUnlock(foobar)


FoobarUpdate
函数简介:

刷新指定的Foobar窗口

函数原型:

long FoobarUpdate(hwnd) 

参数定义:

hwnd 整形数: 指定的Foobar窗口,注意,此句柄必须是通过CreateFoobarxxxx系列函数创建出来的

返回值:

整形数:
0 : 失败

1 : 成功

示例:

dm_ret = dm.FoobarUpdate(foobar)



注意: 所有绘制完成以后,必须通过调用此函数来刷新窗口,否则窗口内容不会改变.



窗口

ClientToScreen
函数简介:

把窗口坐标转换为屏幕坐标 

函数原型:

long ClientToScreen(hwnd,x,y) 

参数定义:

hwnd 整形数: 指定的窗口句柄

x 变参指针: 窗口X坐标

y 变参指针: 窗口Y坐标

返回值:

整形数:
0: 失败
1: 成功

示例:

x = 0:y = 0 
dm_ret = dm.ClientToScreen(hwnd,x,y) 

EnumWindow
函数简介:

根据指定条件,枚举系统中符合条件的窗口,可以枚举到按键自带的无法枚举到的窗口

函数原型:

string EnumWindow(parent,title,class_name,filter) 

参数定义:

parent 整形数: 获得的窗口句柄是该窗口的子窗口的窗口句柄,取0时为获得桌面句柄

title 字符串: 窗口标题

class_name 字符串: 窗口类名

filter整形数: 取值定义如下

1 : 匹配窗口标题,参数title有效

2 : 匹配窗口类名,参数class_name有效

4 : 只匹配指定父窗口的第一层孩子窗口

8 : 匹配所有者窗口为0的窗口,即顶级窗口

16 : 匹配可见的窗口

32 : 匹配出的窗口按照窗口打开顺序依次排列 <收费功能,具体详情点击查看>

这些值可以相加,比如4+8+16就是类似于任务管理器中的窗口列表

返回值:

字符串 :
返回所有匹配的窗口句柄字符串,格式"hwnd1,hwnd2,hwnd3"

示例:

hwnds = dm.EnumWindow(0,"QQ三国","",1+4+8+16)

这句是获取到所有标题栏中有QQ三国这个字符串的窗口句柄集合

hwnds = split(hwnds,",")

转换为数组后,就可以处理了

这里注意,hwnds数组里的是字符串,要用于使用,比如BindWindow时,还得强制类型转换,比如int(hwnds(0))
EnumWindowByProcess
函数简介:

根据指定进程以及其它条件,枚举系统中符合条件的窗口,可以枚举到按键自带的无法枚举到的窗口

函数原型:

string EnumWindowByProcess(process_name,title,class_name,filter) 

参数定义:

process_name 字符串: 进程映像名.比如(svchost.exe)

title 字符串: 窗口标题

class_name 字符串: 窗口类名

filter 整形数: 取值定义如下

1 : 匹配窗口标题,参数title有效

2 : 匹配窗口类名,参数class_name有效

4 : 只匹配指定映像的所对应的第一个进程. 可能有很多同映像名的进程,只匹配第一个进程的.

8 : 匹配所有者窗口为0的窗口,即顶级窗口

16 : 匹配可见的窗口

32 : 匹配出的窗口按照窗口打开顺序依次排列<收费功能,具体详情点击查看>

这些值可以相加,比如4+8+16

返回值:

字符串:
返回所有匹配的窗口句柄字符串,格式"hwnd1,hwnd2,hwnd3"

示例:

hwnds = dm.EnumWindowByProcess("game.exe","天龙八部","",1+8+16)

这句是获取到所有标题栏中有"天龙八部"这个字符串的窗口句柄集合,并且所在进程是"game.exe"指定的进程集合.

hwnds = split(hwnds,",")

转换为数组后,就可以处理了

这里注意,hwnds数组里的是字符串,要用于使用,比如BindWindow时,还得强制类型转换,比如int(hwnds(0))
FindWindow

函数简介:

查找符合类名或者标题名的顶层可见窗口

函数原型:

long FindWindow(class,title) 

参数定义:

class 字符串: 窗口类名,如果为空,则匹配所有. 这里的匹配是模糊匹配,不是精确匹配.

title 字符串: 窗口标题,如果为空,则匹配所有.这里的匹配是模糊匹配,不是精确匹配.

返回值:

整形数:
整形数表示的窗口句柄,没找到返回0

示例:

hwnd = dm.FindWindow("","记事本") 

FindWindowByProcess

函数简介:

根据指定的进程名字,来查找可见窗口.  <收费功能,具体详情点击查看>

函数原型:

long FindWindowByProcess(process_name,class,title) 

参数定义:

process_name 字符串: 进程名. 比如(notepad.exe)

class 字符串: 窗口类名,如果为空,则匹配所有. 这里的匹配是模糊匹配,不是精确匹配.

title 字符串: 窗口标题,如果为空,则匹配所有.这里的匹配是模糊匹配,不是精确匹配.

返回值:

整形数:
整形数表示的窗口句柄,没找到返回0

示例:

hwnd = dm.FindWindowByProcess("noteapd.exe","","记事本") 
FindWindowByProcessId



函数简介:

根据指定的进程Id,来查找可见窗口.  <收费功能,具体详情点击查看>

函数原型:

long FindWindowByProcessId(process_id,class,title) 

参数定义:

process_id 整形数: 进程id. 

class 字符串: 窗口类名,如果为空,则匹配所有. 这里的匹配是模糊匹配,不是精确匹配.

title 字符串: 窗口标题,如果为空,则匹配所有.这里的匹配是模糊匹配,不是精确匹配.

返回值:

整形数:
整形数表示的窗口句柄,没找到返回0

示例:

hwnd = dm.FindWindowByProcessId(123456,"","记事本") 
FindWindowEx
函数简介:

查找符合类名或者标题名的顶层可见窗口,如果指定了parent,则在parent的第一层子窗口中查找.

函数原型:

long FindWindowEx(parent,class,title) 

参数定义:

parent 整形数: 父窗口句柄,如果为空,则匹配所有顶层窗口



class 字符串: 窗口类名,如果为空,则匹配所有. 这里的匹配是模糊匹配,不是精确匹配.

title 字符串: 窗口标题,如果为空,则匹配所有. 这里的匹配是模糊匹配,不是精确匹配.

返回值:

整形数:
整形数表示的窗口句柄,没找到返回0

示例:

hwnd = dm.FindWindowEx(0,"","记事本") 
FindWindowSuper
函数简介:

根据两组设定条件来查找指定窗口. <收费功能,具体详情点击查看>

函数原型:

long FindWindowSuper(spec1,flag1,type1,spec2,flag2,type2) 

参数定义:

spec1 字符串: 查找串1. (内容取决于flag1的值)

flag1整形数: 取值如下:

   0表示spec1的内容是标题

   1表示spec1的内容是程序名字. (比如notepad)

   2表示spec1的内容是类名

   3表示spec1的内容是程序路径.(不包含盘符,比如windowssystem32)

   4表示spec1的内容是父句柄.(十进制表达的串)

   5表示spec1的内容是父窗口标题

   6表示spec1的内容是父窗口类名

   7表示spec1的内容是顶级窗口句柄.(十进制表达的串)

   8表示spec1的内容是顶级窗口标题

   9表示spec1的内容是顶级窗口类名

type1 整形数: 取值如下

0精确判断

1模糊判断

spec2 字符串: 查找串2. (内容取决于flag2的值)

flag2 整形数: 取值如下:

   0表示spec2的内容是标题

   1表示spec2的内容是程序名字. (比如notepad)

   2表示spec2的内容是类名

   3表示spec2的内容是程序路径.(不包含盘符,比如windowssystem32)

   4表示spec2的内容是父句柄.(十进制表达的串)

   5表示spec2的内容是父窗口标题

   6表示spec2的内容是父窗口类名

   7表示spec2的内容是顶级窗口句柄.(十进制表达的串)

   8表示spec2的内容是顶级窗口标题

   9表示spec2的内容是顶级窗口类名

type2  整形数: 取值如下

0精确判断

1模糊判断

返回值:

整形数:
整形数表示的窗口句柄,没找到返回0

示例:

hwnd = dm.FindWindowSuper("记事本",0,1,"notepad",1,0) 
GetClientRect
函数简介:

获取窗口客户区域在屏幕上的位置

函数原型:

long GetClientRect(hwnd,x1,y1,x2,y2) 

参数定义:

hwnd 整形数: 指定的窗口句柄

x1 变参指针: 返回窗口客户区左上角X坐标

y1 变参指针: 返回窗口客户区左上角Y坐标

x2 变参指针: 返回窗口客户区右下角X坐标

y2 变参指针: 返回窗口客户区右下角Y坐标

返回值:

整形数:
0: 失败
1: 成功

示例:

dm_ret = dm.GetClientRect(hwnd,x1,y1,x2,y2)
GetClientSize
函数简介:

获取窗口客户区域的宽度和高度

函数原型:

long GetClientSize(hwnd,width,height) 

参数定义:

hwnd 整形数: 指定的窗口句柄

width 变参指针: 宽度

height 变参指针: 高度

返回值:

整形数:
0: 失败
1: 成功

示例:

dm_ret = dm.GetClientSize(hwnd,w,h) 
TracePrint "宽度:"& w &",高度:"& h

GetForegroundFocus
函数简介:

获取顶层活动窗口中具有输入焦点的窗口句柄 

函数原型:

long GetForegroundFocus() 

参数定义:

返回值:

整形数:
返回整型表示的窗口句柄

示例:

hwnd = dm.GetForegroundFocus()
GetForegroundWindow
函数简介:

获取顶层活动窗口,可以获取到按键自带插件无法获取到的句柄

函数原型:

long GetForegroundWindow() 

参数定义:

返回值:

整形数:
返回整型表示的窗口句柄

示例:

hwnd = dm.GetForegroundWindow()
GetMousePointWindow
函数简介:

获取鼠标指向的窗口句柄,可以获取到按键自带的插件无法获取到的句柄

函数原型:

long GetMousePointWindow() 

参数定义:

返回值:

整形数:
返回整型表示的窗口句柄

示例:

hwnd = dm.GetMousePointWindow()

GetPointWindow
函数简介:

获取给定坐标的窗口句柄,可以获取到按键自带的插件无法获取到的句柄

函数原型:

long GetPointWindow(x,y) 

参数定义:

X 整形数: 屏幕X坐标

Y 整形数: 屏幕Y坐标

返回值:

整形数:
返回整型表示的窗口句柄

示例:

hwnd = dm.GetPointWindow(100,100)

GetSpecialWindow
函数简介:

获取特殊窗口

函数原型:

long GetSpecialWindow(flag) 

参数定义:

Flag 整形数: 取值定义如下

0 : 获取桌面窗口

1 : 获取任务栏窗口

返回值:

整形数:
以整型数表示的窗口句柄

示例:

desk_win = dm.GetSpecialWindow(0) 

GetWindow
函数简介:

获取给定窗口相关的窗口句柄

函数原型:

long GetWindow(hwnd,flag) 

参数定义:

hwnd 整形数: 窗口句柄

flag 整形数: 取值定义如下

0 : 获取父窗口

1 : 获取第一个儿子窗口

2 : 获取First 窗口

3 : 获取Last窗口

4 : 获取下一个窗口

5 : 获取上一个窗口

6 : 获取拥有者窗口

7 : 获取顶层窗口

返回值:

整形数:
返回整型表示的窗口句柄

示例:

own_hwnd = dm.GetWindow(hwnd,6)


GetWindowClass(
函数简介:

获取窗口的类名

函数原型:

string GetWindowClass(hwnd)

参数定义:

hwnd 整形数: 指定的窗口句柄

返回值:

字符串:
窗口的类名

示例:

class_name = dm.GetWindowClass(hwnd) 

GetWindowProcessId(
函数简介:

获取指定窗口所在的进程ID.

函数原型:

long GetWindowProcessId(hwnd) 

参数定义:

hwnd 整形数: 窗口句柄

返回值:

整形数:
返回整型表示的是进程ID

示例:

process_id = dm.GetWindowProcessId(hwnd)

GetWindowProcessPath
函数简介:

获取指定窗口所在的进程的exe文件全路径.

函数原型:

string GetWindowProcessPath(hwnd) 

参数定义:

hwnd 整形数: 窗口句柄

返回值:

字符串:
返回字符串表示的是exe全路径名

示例:

process_path = dm.GetWindowProcessPath(hwnd)
GetWindowRect

函数简介:

获取窗口在屏幕上的位置

函数原型:

long GetWindowRect(hwnd,x1,y1,x2,y2) 

参数定义:

hwnd 整形数: 指定的窗口句柄

x1 变参指针: 返回窗口左上角X坐标

y1 变参指针: 返回窗口左上角Y坐标

x2 变参指针: 返回窗口右下角X坐标

y2 变参指针: 返回窗口右下角Y坐标

返回值:

整形数:
0: 失败
1: 成功

示例:

dm_ret = dm.GetWindowRect(hwnd,x1,y1,x2,y2)

GetWindowState
函数简介:

获取指定窗口的一些属性

函数原型:

long GetWindowState(hwnd,flag) 

参数定义:

hwnd 整形数: 指定的窗口句柄

flag 整形数: 取值定义如下

0 : 判断窗口是否存在

1 : 判断窗口是否处于激活

2 : 判断窗口是否可见

3 : 判断窗口是否最小化

4 : 判断窗口是否最大化

5 : 判断窗口是否置顶

返回值:

整形数:
0: 不满足条件
1: 满足条件

示例:

dm_ret = dm.GetWindowState(hwnd,3) 
If dm_ret = 1 Then
    MessageBox "窗口已经最小化了"
End If
GetWindowTitle
函数简介:

获取窗口的标题

函数原型:

string GetWindowTitle(hwnd)

参数定义:

hwnd 整形数: 指定的窗口句柄

返回值:

字符串:
窗口的标题

示例:

title = dm.GetWindowTitle(hwnd) 

MoveWindow
函数简介:

移动指定窗口到指定位置

函数原型:

long MoveWindow(hwnd,x,y) 

参数定义:

hwnd 整形数: 指定的窗口句柄

x 整形数: X坐标

y 整形数: Y坐标

返回值:

整形数:
0: 失败
1: 成功

示例:

dm.MoveWindow hwnd,-10,-10


ScreenToClient
函数简介: 

把屏幕坐标转换为窗口坐标

函数原型:

long ScreenToClient(hwnd,x,y) 

参数定义:

hwnd 整形数: 指定的窗口句柄

x 变参指针: 屏幕X坐标

y 变参指针: 屏幕Y坐标

返回值:

整形数:
0: 失败
1: 成功

示例:

x = 100:y = 100 
dm_ret = dm.ScreenToClient(hwnd,x,y) 
SendString(

函数简介:

向指定窗口发送文本数据

函数原型:

long SendString(hwnd,str) 

参数定义:

hwnd 整形数: 指定的窗口句柄

str 字符串: 发送的文本数据

返回值:

整形数:
0: 失败
1: 成功

示例:

dm.SendString hwnd,"我是来测试的"

SendString2

函数简介:

向指定窗口发送文本数据

函数原型:

long SendString2(hwnd,str) 

参数定义:

hwnd 整形数: 指定的窗口句柄

str 字符串: 发送的文本数据

返回值:

整形数:
0: 失败
1: 成功

示例:

dm.SendString2 hwnd,"我是来测试的"



注: 此接口为老的SendString,如果新的SendString不能输入,可以尝试此接口.

SendStringIme
函数简介:

向绑定的窗口发送文本数据.必须配合dx.public.input.ime属性.  <收费功能,具体详情点击查看>

函数原型:

long SendStringIme(str) 

参数定义:

str 字符串: 发送的文本数据

返回值:

整形数:
0: 失败
1: 成功

示例:

dm_ret = dm.BindWindowEx(hwnd,"normal","normal","normal","dx.public.input.ime",0)
dm.SendStringIme "我是来测试的"
SetClientSize

函数简介:

设置窗口客户区域的宽度和高度

函数原型:

long SetClientSize(hwnd,width,height) 

参数定义:

hwnd 整形数: 指定的窗口句柄

width 整形数: 宽度

height 整形数: 高度

返回值:

整形数:
0: 失败
1: 成功

示例:

dm_ret = dm.SetClientSize(hwnd,800,600) 

SetWindowSize
函数简介:

设置窗口的大小

函数原型:

long SetWindowSize(hwnd,width,height) 

参数定义:

hwnd 整形数: 指定的窗口句柄

width 整形数: 宽度

height 整形数: 高度

返回值:

整形数:
0: 失败
1: 成功

示例:

dm_ret = dm.SetWindowSize(hwnd,300,400)

SetWindowState
函数简介:

设置窗口的状态

函数原型:

long SetWindowState(hwnd,flag) 

参数定义:

hwnd 整形数: 指定的窗口句柄

flag 整形数: 取值定义如下

0 : 关闭指定窗口

1 : 激活指定窗口

2 : 最小化指定窗口

3 : 最小化指定窗口,并释放内存

4 : 最大化指定窗口

5 : 恢复指定窗口 ,但不激活

6 : 隐藏指定窗口

7 : 显示指定窗口

8 : 置顶指定窗口

9 : 取消置顶指定窗口

10 : 禁止指定窗口

11 : 取消禁止指定窗口

12 : 恢复并激活指定窗口

13 : 强制结束窗口所在进程.

返回值:

整形数:
0: 失败
1: 成功

示例:

dm_ret = dm.SetWindowState(hwnd,0) 

SetWindowText

函数简介:

设置窗口的标题

函数原型:

long SetWindowText(hwnd,title) 

参数定义:

hwnd 整形数: 指定的窗口句柄

titie 字符串: 标题

返回值:

整形数:
0: 失败
1: 成功

示例:

dm_ret = dm.SetWindowText(hwnd,"test") 

SetWindowTransparent
函数简介:

设置窗口的透明度

函数原型:

long SetWindowTransparent(hwnd,trans) 

参数定义:

hwnd 整形数: 指定的窗口句柄

trans 整形数: 透明度取值(0-255) 越小透明度越大 0为完全透明(不可见) 255为完全显示(不透明)

返回值:

整形数:
0: 失败
1: 成功

示例:

dm_ret = dm.SetWindowTransparent(hwnd,200) 



注 :  此接口不支持WIN98


答题
FaqCapture
函数简介:

截取指定范围内的动画或者图像,并返回此句柄.

函数原型:

long FaqCapture(x1, y1, x2, y2, quality, delay, time) 

参数定义:

x1 整形数: 左上角X坐标

y1 整形数: 左上角Y坐标

x2 整形数: 右下角X坐标

y2 整形数: 右下角Y坐标

quality 整形数: 图像或动画品质,或者叫压缩率,此值越大图像质量越好 取值范围(1-100)

delay 整形数: 截取动画时用,表示相隔两帧间的时间间隔,单位毫秒 (如果只是截取静态图像,这个参数必须是0)

time 整形数: 表示总共截取多久的动画,单位毫秒 (如果只是截取静态图像,这个参数必须是0)

返回值:

整形数:
图像或者动画句柄

示例:

// 截取这个范围内,3秒动画,图像质量为中等50,动画帧率间隔为100ms
handle = dm.FaqCapture(intX - 50,intY - 232,intX+272,intY-12,50,100,3000)



注 : 从插件版本2.1119之后,接口FaqCapture返回handle,不需要再手动调用FaqRelease释放了。插件已经自动释放了.
FaqCaptureFromFile
函数简介:

截取指定图片中的图像,并返回此句柄.  <收费功能,具体详情点击查看>

函数原型:

long FaqCaptureFromFile(x1, y1, x2, y2, file, quality) 

参数定义:

x1 整形数: 左上角X坐标

y1 整形数: 左上角Y坐标

x2 整形数: 右下角X坐标

y2 整形数: 右下角Y坐标

file 字符串: 图片文件名,图像格式基本都支持.

quality 整形数: 图像或动画品质,或者叫压缩率,此值越大图像质量越好 取值范围(1-100)

返回值:

整形数:
图像或者动画句柄

示例:


handle = dm.FaqCaptureFromFile(0,0,2000,2000,"c: est.bmp",50)


FaqFetch

函数简介:

获取由FaqPost发送后,由服务器返回的答案.

函数原型:

string FaqFetch() 

参数定义:

返回值:

字符串:
如果此函数调用失败,那么返回值如下

"Error:错误描述" 

如果函数调用成功,那么返回值如下

"OK:答案"

根据FaqPost中 request_type取值的不同,返回值不同

当request_type 为0时,答案的格式为"x,y" (不包含引号)

当request_type 为1时,答案的格式为"1" "2" "3" "4" "5" "6" (不包含引号)

当request_type 为2时,答案就是要求的答案 比如 "李白" (不包含引号)

当request_type 为3时,答案的格式为"x1,y1|x2,y2" 比如 "20,30|78,68" (不包含引号)

如果返回为空字符串,表示FaqPost还未处理完毕,或者没有调用过FaqPost.

示例:

// 截取这个范围内,3秒动画,图像质量为中等50,动画帧率间隔为100ms
handle = dm.FaqCapture(50,50,300,400,50,100,3000)
// 调用FaqPost异步发送
dm_ret = dm.FaqPost("192.168.1.100:12345",handle,1,3 * 60 * 1000)
If dm_ret = 0 Then
    MessageBox "发送失败,可能上个FaqPost还未处理完毕"
    EndScript
End If

// 不影响脚本运行
Do
   result = dm.FaqFetch()
   If len(result) > 0 Then
        MessageBox "服务器返回结果 = "&result
   End If
   // 做其他的事情 这里就假设为延时
   Delay 1000
Loop



注: 如果此函数调用成功后,插件内部状态会再次重置为未处理状态,可以接着处理FaqPost接口.
FaqGetSize(
函数简介:

获取句柄所对应的数据包的大小,单位是字节

函数原型:

long FaqGetSize(handle) 

参数定义:

handle 整形数: 由FaqCapture返回的句柄

返回值:

整形数:
数据包大小,一般用于判断数据大小,选择合适的压缩比率.

示例:

// 截取这个范围内,3秒动画,图像质量为中等50,动画帧率间隔为100ms
handle = dm.FaqCapture(intX - 50,intY - 232,intX+272,intY-12,50,100,3000)
packet_size = dm.FaqGetSize(handle)
MessageBox packet_size

FaqPost

函数简介:

发送指定的图像句柄到指定的服务器,并立即返回(异步操作).

函数原型:

long FaqPost(server, handle, request_type, time_out) 

参数定义:

server 字符串: 服务器地址以及端口,格式为(ip:port),例如 "192.168.1.100:12345"

handle 整形数: 由FaqCapture获取到的句柄

request_type 整形数: 取值定义如下

             0 : 要求获取坐标

             1 : 要求获取选项,比如(ABCDE)

             2 : 要求获取文字答案

3 : 要求获取两个坐标.此功能要求答题器必须是v15之后的版本. <收费功能,具体详情点击查看>

time_out 整形数: 表示等待多久,单位是毫秒

返回值:

整形数:
0 : 失败,一般情况下是由于上个FaqPost还没有处理完毕(服务器还没返回)

1 : 成功

示例:

// 截取这个范围内,静态图片,图像质量为中等50 
handle = dm.FaqCapture(50,50,300,400,50,0,0)
// 调用FaqPost异步发送
dm_ret = dm.FaqPost("192.168.1.100:12345",handle,1,3 * 60 * 1000)
If dm_ret = 0 Then
    MessageBox "发送失败,可能上个FaqPost还未处理完毕"
    EndScript
End If

// 不影响脚本运行
Do
   result = dm.FaqFetch()
   If len(result) > 0 Then
        result = split(result,":")
        If result(0) = "OK" Then
             MessageBox result(1)
        Else
             MessageBox "错误:"& result(1)
        End If 
   End If
   // 做其他的事情 这里就假设为延时
   Delay 1000
Loop



注 : 从插件版本2.1119之后,接口FaqCapture返回handle,不需要再手动调用FaqRelease释放了。插件已经自动释放了.

本接口不支持多ip发送.
FaqSend
函数简介:

发送指定的图像句柄到指定的服务器,并等待返回结果(同步等待).

函数原型:

string FaqSend(server, handle, request_type, time_out) 

参数定义:

server 字符串: 服务器地址以及端口,格式为(ip:port),例如 "192.168.1.100:12345"
         多个地址可以用"|"符号连接。比如"192.168.1.100:12345|192.168.1.101:12345"。

handle 整形数: 由FaqCapture获取到的句柄

request_type 整形数: 取值定义如下

             0 : 要求获取坐标

             1 : 要求获取选项,比如(ABCDE)

             2 : 要求获取文字答案

3 : 要求获取两个坐标.此功能要求答题器必须是v15之后的版本. <收费功能,具体详情点击查看>



time_out 整形数: 表示等待多久,单位是毫秒

返回值:

整形数:

如果此函数调用失败,那么返回值如下

"Error:错误描述" 

如果函数调用成功,那么返回值如下

"OK:答案"

根据request_type取值的不同,返回值不同

当request_type 为0时,答案的格式为"x,y" (不包含引号)

当request_type 为1时,答案的格式为"1" "2" "3" "4" "5" "6" (不包含引号)

当request_type 为2时,答案就是要求的答案 比如 "李白" (不包含引号)

当request_type 为3时,答案的格式为"x1,y1|x2,y2" 比如 "20,30|78,68" (不包含引号)

示例:

// 截取这个范围内,3秒动画,图像质量为中等50,动画帧率间隔为100ms
handle = dm.FaqCapture(20,20,100,100,50,100,3000)
// 等待3分钟,答案要求是选项
result = dm.FaqSend("192.168.1.100:12345|192.168.1.101:12345",handle,1,3 * 60 * 1000)

result = split(result,":")
If result(0) = "OK" Then
   If result(1) = "1" Then
      MessageBox "1"
   ElseIf result(1) = "2" Then
      MessageBox "2"
   ElseIf result(1) = "3" Then
      MessageBox "3"
   ElseIf result(1) = "4" Then
      MessageBox "4"
   End If 
Else
   MessageBox "错误:"& result(1)
End If 



注 : 从插件版本2.1119之后,接口FaqCapture返回handle,不需要再手动调用FaqRelease释放了。插件已经自动释放了.

另外,当向多个地址发送题目时,只要有任意一个服务器返回答案,函数就返回结果。答题接口和答题器之间的通讯协议
答题接口和答题器之间的通讯协议

数据结构定义:

// 答题类型 对应于FaqRequestPacket中的request_type
#define REQUEST_TYPE_POS   0           // 坐标
#define REQUEST_TYPE_ABCD  1           // 选项
#define REQUEST_TYPE_OTHER 2           // 文本
#define REQUEST_TYPE_DOUBLE_POS 3      // 双坐标

// 发送包结构体
typedef struct
{
    // 服务器转发用(分流的时候可能会用到)
    SOCKET socket;               // 分流上级发送的socket id.
    char  ip[32];                // 分流上级机器IP

// 客户端内容
    DWORD request_type; // 答题类型
    DWORD data_len;     // 真实数据的长度
    char  data[1];      // 无意义. 数据指针.
}FaqRequestPacket;

// 接收包结构体
typedef struct
{
    // 服务器转发用
    SOCKET socket;         // 同FaqRequestPacket
    char  ip[32];          // 同FaqRequestPacket

// 客户端内容
    char result[256];      // 接收到的答案. 文本形式描述. 
}FaqReceivePacket;



调用FaqSend或者FaqPost

连接服务器

发送数据包FaqRequestPacket

等待接收数据包FaqReceivePacket

接收到数据包后,会再向服务端发送1个字节的数据,内容是0,表示接收答案完毕.

通讯过程流程描述





























发送数据包详细格式解析:

发送的数据包由包头+数据体两部分组成.

其中包头的长度是sizeof(FaqRequestPacket). 

数据体的长度是FaqRequestPacket结构体中data_len指定的长度. 用图形描述如下:

                              整个数据包(发送)

    

            FaqRequestPacket      |     数据(数据头+数据体)



      长度sizeof(FaqRequestPacket)        长度(data_len)



其中数据部分的结构定义如下:

数据部分包含2部分,数据头和数据体.
数据头12个字节. 前4个字节是一个头标识. 内容是4个字符 'D' 'M' 'F' 'Q'.
接下来4个字节的内容表示当前图像有多少帧. 如果是静态图像此值为1
再接下来4个字节表示每帧之间的延时是多少毫秒. 如果是静态图像此值为0

数据体部分是连续顺序存放图片数据. 按照帧的顺序依次存放. 每个帧前的4个字节表示当前帧有多少个字节.比如
(长度)帧数1(长度)帧数2……(长度)帧数N.   每个帧的图像格式是jpeg格式.

接收包的格式很简单。就不多说了.


DmGuard

函数简介:

针对部分检测措施的保护盾.  <收费功能,具体详情点击查看>

函数原型:

long DmGuard(enable,type)

参数定义:

enable 整形数: 0表示关闭保护盾,1表示打开保护盾.

type 字符串: 参数具体内容不公开. 

返回值:

整形数:
0 : 失败
1 : 成功

示例:

//这里的xxx只是示例。实际并无用.
dm.DmGuard 1,"xxx"  

注 : 此函数必须在目标进程打开之前调用,调用一次即可。调用的dm对象必须全程保持,不可以释放.
后台设置
函数简介:

绑定指定的窗口,并指定这个窗口的屏幕颜色获取方式,鼠标仿真模式,键盘仿真模式,以及模式设定,高级用户可以参考BindWindowEx更加灵活强大.

函数原型:

long BindWindow(hwnd,display,mouse,keypad,mode)

参数定义:

hwnd 整形数: 指定的窗口句柄

display 字符串: 屏幕颜色获取方式 取值有以下几种

"normal" : 正常模式,平常我们用的前台截屏模式

"gdi" : gdi模式,用于窗口采用GDI方式刷新时. 此模式占用CPU较大.

"gdi2" : gdi2模式,此模式兼容性较强,但是速度比gdi模式要慢许多,如果gdi模式发现后台不刷新时,可以考虑用gdi2模式.

"dx2" : dx2模式,用于窗口采用dx模式刷新,如果dx方式会出现窗口所在进程崩溃的状况,可以考虑采用这种.采用这种方式要保证窗口有一部分在屏幕外.win7或者vista不需要移动也可后台.此模式占用CPU较大.

"dx3" : dx3模式,同dx2模式,但是如果发现有些窗口后台不刷新时,可以考虑用dx3模式,此模式比dx2模式慢许多. 此模式占用CPU较大.

"dx" : dx模式,等同于BindWindowEx中,display设置的"dx.graphic.2d|dx.graphic.3d",具体参考BindWindowEx
注意此模式需要管理员权限

mouse 字符串: 鼠标仿真模式 取值有以下几种

"normal" : 正常模式,平常我们用的前台鼠标模式

"windows": Windows模式,采取模拟windows消息方式 同按键自带后台插件.

"windows2": Windows2 模式,采取模拟windows消息方式(锁定鼠标位置) 此模式等同于BindWindowEx中的mouse为以下组合
"dx.mouse.position.lock.api|dx.mouse.position.lock.message|dx.mouse.state.message"
注意此模式需要管理员权限

"windows3": Windows3模式,采取模拟windows消息方式,可以支持有多个子窗口的窗口后台.

"dx": dx模式,采用模拟dx后台鼠标模式,这种方式会锁定鼠标输入.有些窗口在此模式下绑定时,需要先激活窗口再绑定(或者绑定以后激活),否则可能会出现绑定后鼠标无效的情况.此模式等同于BindWindowEx中的mouse为以下组合
"dx.public.active.api|dx.public.active.message|dx.mouse.position.lock.api|dx.mouse.position.lock.message|dx.mouse.state.api|dx.mouse.state.message|dx.mouse.api|dx.mouse.focus.input.api|dx.mouse.focus.input.message|dx.mouse.clip.lock.api|dx.mouse.input.lock.api|dx.mouse.cursor"
注意此模式需要管理员权限

"dx2":dx2模式,这种方式类似于dx模式,但是不会锁定外部鼠标输入.
有些窗口在此模式下绑定时,需要先激活窗口再绑定(或者绑定以后手动激活),否则可能会出现绑定后鼠标无效的情况. 此模式等同于BindWindowEx中的mouse为以下组合
"dx.public.active.api|dx.public.active.message|dx.mouse.position.lock.api|dx.mouse.state.api|dx.mouse.api|dx.mouse.focus.input.api|dx.mouse.focus.input.message|dx.mouse.clip.lock.api|dx.mouse.input.lock.api| dx.mouse.cursor"
注意此模式需要管理员权限

keypad 字符串: 键盘仿真模式 取值有以下几种

"normal" : 正常模式,平常我们用的前台键盘模式

"windows": Windows模式,采取模拟windows消息方式 同按键的后台插件.

"dx": dx模式,采用模拟dx后台键盘模式。有些窗口在此模式下绑定时,需要先激活窗口再绑定(或者绑定以后激活),否则可能会出现绑定后键盘无效的情况. 此模式等同于BindWindowEx中的keypad为以下组合
"dx.public.active.api|dx.public.active.message| dx.keypad.state.api|dx.keypad.api|dx.keypad.input.lock.api"
注意此模式需要管理员权限



mode 整形数: 模式。 取值有以下两种

     0 : 推荐模式此模式比较通用,而且后台效果是最好的.

     1 : 和模式0效果一样,如果模式0会失败时,可以尝试此模式. <收费功能,具体详情点击查看>

     2 : 同模式0,此模式为老的模式0,尽量不要用此模式,除非有兼容性问题.

     3 : 同模式1,此模式为老的模式1,尽量不要用此模式,除非有兼容性问题. <收费功能,具体详情点击查看>

     4 : 同模式0,如果模式0有崩溃问题,可以尝试此模式.

     5 : 同模式1, 如果模式0有崩溃问题,可以尝试此模式. <收费功能,具体详情点击查看>

     6 : 同模式0,如果模式0有崩溃问题,可以尝试此模式. <收费功能,具体详情点击查看>

     7 : 同模式1,如果模式1有崩溃问题,可以尝试此模式. <收费功能,具体详情点击查看>

     101 : 超级绑定模式. 可隐藏目标进程中的dm.dll.避免被恶意检测.效果要比dx.public.hide.dll好. 推荐使用. <收费功能,具体详情点击查看>

     103 : 同模式101,如果模式101有崩溃问题,可以尝试此模式. <收费功能,具体详情点击查看>



返回值:

整形数:
0: 失败
1: 成功

如果返回0,可以调用GetLastError来查看具体失败错误码,帮助分析问题.

示例:


// display: 前台 鼠标:前台键盘:前台 模式0
dm_ret = dm.BindWindow(hwnd,"normal","normal","normal",0)

// display: gdi 鼠标:前台 键盘:前台 模式1
dm_ret = dm.BindWindow(hwnd,"gdi","normal","normal",1)

// display: dx 鼠标:前台 键盘:前台 模式0
dm_ret = dm.BindWindow(hwnd,"dx","normal","normal",0)

// display: dx 鼠标:windows后台 键盘:windows后台 模式1
dm_ret = dm.BindWindow(hwnd,"dx","windows","windows",1)

// display: dx 鼠标:dx 后台 键盘: dx后台 模式1
dm_ret = dm.BindWindow(hwnd,"dx","dx","dx",1) 

// display: dx 鼠标:windows3后台 键盘:windows后台 模式1
dm_ret = dm.BindWindow(hwnd,"dx","windows3","windows",1)


注意:


绑定之后,所有的坐标都相对于窗口的客户区坐标(不包含窗口边框)
另外,绑定窗口后,必须加以下代码,以保证所有资源正常释放

这个函数的意思是在脚本结束时,会调用这个函数。需要注意的是,目前的按键版本对于这个函数的执行不是线程级别的,也就是说,这个函数只会在主线程执行,子线程绑定的大漠对象,不保证完全释放。 
Sub OnScriptExit()
    dm_ret = dm.UnBindWindow() 
End Sub

另外 绑定dx会比较耗时间,请不要频繁调用此函数.

另外如果绑定的是dx,要注意不可连续操作dx,中间至少加个10MS的延时,否则可能会导致操作失败.比如绑定图色DX,那么不要连续取色等,键鼠也是一样.



注意,图色dx,鼠标windows2 dx dx2以及键盘dx都需要管理员权限才能运行,所以对于WIN7和VISTA用户,在启动目标窗口时,必须用管理员方式启动,否则无法绑定成功!



还有一点特别要注意的是,有些窗口绑定之后必须加一定的延时,否则后台也无效.一般1秒到2秒的延时就足够.



发现绑定失败的几种可能(一般是需要管理员权限的模式才有可能会失败)

1.     系统登录的帐号必须有Administrators权限

2.     如果是vista和win7系统,启动窗口进程必须用管理员模式启动,脚本也必须用管理员模式启动.

3.     一些防火墙会防止插件注入窗口所在进程,比如360防火墙等,必须把dm.dll设置为信任.

4.     还有一个比较弱智的可能性,那就是插件没有注册到系统中,这时CreateObject压根就是失败的. 检测对象是否创建成功很简单,如下代码

set dm = createobject("dm.dmsoft")
ver = dm.Ver()
If len(ver) = 0 Then
    MessageBox "创建对象失败,检查系统是否禁用了vbs脚本权限"
    EndScript
End If



5.     在沙盘中开的窗口进程,绑定一些需要管理员权限的模式,会失败。
解决方法是要配置沙盘参数,具体如何配置参考沙盘绑定方法.



6.     窗口所在进程有保护,这个我也无能为力.

BindWindowEx
函数简介:

绑定指定的窗口,并指定这个窗口的屏幕颜色获取方式,鼠标仿真模式,键盘仿真模式 高级用户使用.

函数原型:

long BindWindowEx(hwnd,display,mouse,keypad,public,mode)

参数定义:

hwnd 整形数: 指定的窗口句柄

display 字符串: 屏幕颜色获取方式 取值有以下几种

"normal" : 正常模式,平常我们用的前台截屏模式

"gdi" : gdi模式,用于窗口采用GDI方式刷新时. 此模式占用CPU较大.

"gdi2" : gdi2模式,此模式兼容性较强,但是速度比gdi模式要慢许多,如果gdi模式发现后台不刷新时,可以考虑用gdi2模式.

"dx2" : dx2模式,用于窗口采用dx模式刷新,如果dx方式会出现窗口进程崩溃的状况,可以考虑采用这种.采用这种方式要保证窗口有一部分在屏幕外.win7或者vista不需要移动也可后台. 此模式占用CPU较大.

"dx3" : dx3模式,同dx2模式,但是如果发现有些窗口后台不刷新时,可以考虑用dx3模式,此模式比dx2模式慢许多. 此模式占用CPU较大.

dx模式,用于窗口采用dx模式刷新,取值可以是以下任意组合,组合采用"|"符号进行连接  注意此模式需要管理员权限. 支持BindWindow中的缩写模式. 比如dx代表" dx.graphic.2d| dx.graphic.3d"
1. "dx.graphic.2d"  2d窗口的dx图色模式  
2. "dx.graphic.2d.2"  2d窗口的dx图色模式  是dx.graphic.2d的增强模式.兼容性更好. <收费功能,具体详情点击查看>
3. "dx.graphic.3d"  3d窗口的dx图色模式,注意采用这个模式,必须关闭窗口3D视频设置的全屏抗锯齿选项.
4. "dx.graphic.3d.8"  3d窗口的dx8图色模式,注意采用这个模式,必须关闭窗口3D视频设置的全屏抗锯齿选项. 这个模式支持某些老的引擎. <收费功能,具体详情点击查看>


mouse 字符串: 鼠标仿真模式 取值有以下几种

"normal" : 正常模式,平常我们用的前台鼠标模式

"windows": Windows模式,采取模拟windows消息方式 同按键的后台插件.

"windows3": Windows3模式,采取模拟windows消息方式,可以支持有多个子窗口的窗口后台

dx模式,取值可以是以下任意组合. 组合采用"|"符号进行连接 注意此模式需要管理员权限.支持BindWindow中的缩写模式,比如windows2代表"dx.mouse.position.lock.api|dx.mouse.position.lock.message|dx.mouse.state.message"
1. "dx.mouse.position.lock.api"  此模式表示通过封锁系统API,来锁定鼠标位置.
2. "dx.mouse.position.lock.message" 此模式表示通过封锁系统消息,来锁定鼠标位置.
3. "dx.mouse.focus.input.api" 此模式表示通过封锁系统API来锁定鼠标输入焦点.
4. "dx.mouse.focus.input.message"此模式表示通过封锁系统消息来锁定鼠标输入焦点.
5. "dx.mouse.clip.lock.api" 此模式表示通过封锁系统API来锁定刷新区域。注意,使用这个模式,在绑定前,必须要让窗口完全显示出来.
6. "dx.mouse.input.lock.api" 此模式表示通过封锁系统API来锁定鼠标输入接口.
7. "dx.mouse.state.api" 此模式表示通过封锁系统API来锁定鼠标输入状态.
8. "dx.mouse.state.message" 此模式表示通过封锁系统消息来锁定鼠标输入状态.
9. "dx.mouse.api"  此模式表示通过封锁系统API来模拟dx鼠标输入.
10. "dx.mouse.cursor"  开启此模式,可以后台获取鼠标特征码. <收费功能,具体详情点击查看>
11. "dx.mouse.raw.input"  有些窗口需要这个才可以正常操作鼠标. <收费功能,具体详情点击查看>
12. "dx.mouse.input.lock.api2"  部分窗口在后台操作时,前台鼠标会移动,需要这个属性. <收费功能,具体详情点击查看>
13. "dx.mouse.input.lock.api3"  部分窗口在后台操作时,前台鼠标会移动,需要这个属性. <收费功能,具体详情点击查看>


keypad 字符串: 键盘仿真模式 取值有以下几种

"normal" : 正常模式,平常我们用的前台键盘模式

"windows": Windows模式,采取模拟windows消息方式 同按键的后台插件.

dx模式,取值可以是以下任意组合. 组合采用"|"符号进行连接 注意此模式需要管理员权限.支持BindWindow中的缩写模式.比如dx代表" dx.public.active.api|dx.public.active.message| dx.keypad.state.api|dx.keypad.api|dx.keypad.input.lock.api"
1. "dx.keypad.input.lock.api" 此模式表示通过封锁系统API来锁定键盘输入接口.
2. "dx.keypad.state.api" 此模式表示通过封锁系统API来锁定键盘输入状态.
3. "dx.keypad.api" 此模式表示通过封锁系统API来模拟dx键盘输入. 
4. "dx.keypad.raw.input"  有些窗口需要这个才可以正常操作键盘. <收费功能,具体详情点击查看>



public 字符串: 公共属性 dx模式共有  注意以下列表中,前面打五角星的表示需要管理员权限 

取值可以是以下任意组合. 组合采用"|"符号进行连接 这个值可以为空
1. ★ "dx.public.active.api" 此模式表示通过封锁系统API来锁定窗口激活状态.  注意,部分窗口在此模式下会耗费大量资源慎用. 
2. ★ "dx.public.active.message" 此模式表示通过封锁系统消息来锁定窗口激活状态.  注意,部分窗口在此模式下会耗费大量资源 慎用. 另外如果要让此模式生效,必须在绑定前,让绑定窗口处于激活状态(或者绑定以后再激活),否则此模式将失效. 比如dm.SetWindowState hwnd,1 然后再绑定.
3.    "dx.public.disable.window.position" 此模式将锁定绑定窗口位置.不可与"dx.public.fake.window.min"共用.
4.    "dx.public.disable.window.size" 此模式将锁定绑定窗口,禁止改变大小. 不可与"dx.public.fake.window.min"共用.
5.    "dx.public.disable.window.minmax" 此模式将禁止窗口最大化和最小化,但是付出的代价是窗口同时也会被置顶. 不可与"dx.public.fake.window.min"共用.
6.    "dx.public.fake.window.min" 此模式将允许目标窗口在最小化状态时,仍然能够像非最小化一样操作.. 另注意,此模式会导致任务栏顺序重排,所以如果是多开模式下,会看起来比较混乱,建议单开使用,多开不建议使用. <收费功能,具体详情点击查看>
7.    "dx.public.hide.dll" 此模式将会隐藏目标进程的大漠插件,避免被检测..另外使用此模式前,请仔细做过测试,此模式可能会造成目标进程不稳定,出现崩溃。<收费功能,具体详情点击查看>
8. ★ "dx.public.active.api2" 此模式表示通过封锁系统API来锁定窗口激活状态. 部分窗口遮挡无法后台,需要这个属性. <收费功能,具体详情点击查看>
9. ★ "dx.public.input.ime" 此模式是配合SendStringIme使用. 具体可以查看SendStringIme接口. <收费功能,具体详情点击查看>
10 ★ "dx.public.graphic.protect" 此模式可以保护dx图色不被恶意检测.同时对dx.keypad.api和dx.mouse.api也有保护效果. <收费功能,具体详情点击查看>
11 ★ "dx.public.disable.window.show" 禁止目标窗口显示,这个一般用来配合dx.public.fake.window.min来使用. <收费功能,具体详情点击查看>
12 ★ "dx.public.anti.api" 此模式可以突破部分窗口对后台的保护. <收费功能,具体详情点击查看>
13 ★ "dx.public.memory" 此模式可以让内存读写函数突破保护.只要绑定成功即可操作内存函数. <收费功能,具体详情点击查看>
14 ★ "dx.public.km.protect" 此模式可以保护dx键鼠不被恶意检测.最好配合dx.public.anti.api一起使用. 此属性可能会导致部分后台功能失效. <收费功能,具体详情点击查看>
15    "dx.public.prevent.block"  绑定模式1 3 5 7 101 103下,可能会导致部分窗口卡死. 这个属性可以避免卡死. <收费功能,具体详情点击查看>



mode 整形数: 模式。 取值有以下两种

     0 : 推荐模式,此模式比较通用,而且后台效果是最好的.

     1 : 和模式0效果一样,如果模式0会失败时,可以尝试此模式, <收费功能,具体详情点击查看>. 

     2 : 同模式0,此模式为老的模式0,尽量不要用此模式,除非有兼容性问题.

     3 : 同模式1,此模式为老的模式1,尽量不要用此模式,除非有兼容性问题. <收费功能,具体详情点击查看>

     4 : 同模式0,如果模式0有崩溃问题,可以尝试此模式.

     5 : 同模式1, 如果模式0有崩溃问题,可以尝试此模式. <收费功能,具体详情点击查看>

     6 : 同模式0,如果模式0有崩溃问题,可以尝试此模式. <收费功能,具体详情点击查看>.

     7 : 同模式1,如果模式1有崩溃问题,可以尝试此模式. <收费功能,具体详情点击查看>.

     101 : 超级绑定模式. 可隐藏目标进程中的dm.dll.避免被恶意检测.效果要比dx.public.hide.dll好. 推荐使用. <收费功能,具体详情点击查看>

     103 : 同模式101,如果模式101有崩溃问题,可以尝试此模式. <收费功能,具体详情点击查看>



返回值:

整形数:
0: 失败
1: 成功

如果返回0,可以调用GetLastError来查看具体失败错误码,帮助分析问题.

示例:


比如
dm_ret = dm.BindWindowEx(hwnd,"normal","dx.mouse.position.lock.api|dx.mouse.position.lock.message","windows","dx.public.active.api",0)



dm_ret = dm.BindWindowEx(hwnd,"dx2","windows","normal","dx.public.active.api",0)



dm_ret = dm.BindWindowEx(hwnd,"dx.graphic.2d","dx.mouse.position.lock.api|dx.mouse.position.lock.message","dx.keypad.state.api|dx.keypad.api","",0)



dm_ret = dm.BindWindowEx(hwnd,"dx2","windows","windows","",0)


dm_ret = dm.BindWindowEx(hwnd,"dx2","windows","windows","dx.public.disable.window.size|dx.public.disable.window.minmax",0)



dm_ret = dm.BindWindowEx(hwnd,"dx2","windows3","windows","dx.mouse.position.lock.api",0)

等等.


注意:


绑定之后,所有的坐标都相对于窗口的客户区坐标(不包含窗口边框)
另外,绑定窗口后,必须加以下代码,以保证所有资源正常释放

这个函数的意思是在脚本结束时,会调用这个函数。需要注意的是,目前的按键版本对于这个函数的执行不是线程级别的,也就是说,这个函数只会在主线程执行,子线程绑定的大漠对象,不保证完全释放。高级语言中则需要自己控制在适当的时候解除绑定.
Sub OnScriptExit()
    dm_ret = dm.UnBindWindow() 
End Sub

另外 绑定dx会比较耗时间,请不要频繁调用此函数.

另外如果绑定的是dx,要注意不可连续操作dx,中间至少加个10MS的延时,否则可能会导致操作失败.比如绑定图色DX,那么不要连续取色等,键鼠也是一样.



注意,需要组合的模式,都需要管理员权限才能运行,所以对于WIN7和VISTA用户,在启动窗口进程时,必须用管理员方式启动,否则无法绑定成功!



还有一点特别要注意的是,有些窗口绑定之后必须加一定的延时,否则后台也无效.一般1秒到2秒的延时就足够.



发现绑定失败的几种可能(一般是需要管理员权限的模式才有可能会失败)

1.     系统登录的帐号必须有Administrators权限

2.     如果是vista和win7系统,启动窗口进程必须用管理员模式启动,脚本也必须用管理员模式启动.

3.     一些防火墙会防止插件注入窗口所在进程,比如360防火墙等,必须把dm.dll设置为信任.

4.     还有一个比较弱智的可能性,那就是插件没有注册到系统中,这时CreateObject压根就是失败的. 检测对象是否创建成功很简单,如下代码

set dm = createobject("dm.dmsoft")
ver = dm.Ver()
If len(ver) = 0 Then
    MessageBox "创建对象失败,检查系统是否禁用了vbs脚本权限"
    EndScript
End If

5.     在沙盘中开的窗口,绑定一些需要管理员权限的模式,会失败。
解决方法是要配置沙盘参数,参考如何配置沙盘参数.



6.     窗口所在进程有保护,这个我也无能为力.

DownCpu
函数简介:

降低目标窗口所在进程的CPU占用

函数原型:

long DownCpu(long rate)

参数定义:

rate 整形数: 取值范围0到100   取值为0 表示关闭CPU优化. 这个值越大表示降低CPU效果越好.

返回值:

整形数:
0: 失败
1: 成功

示例:


dm_ret = dm.BindWindowEx(hwnd,"dx.graphic.3d","normal","normal","",0)
dm.DownCpu 50



注意: 此接口必须在绑定窗口成功以后调用,而且必须保证目标窗口可以支持dx.graphic.3d或者dx.graphic.3d.8或者dx.graphic.2d或者dx.graphic.2d.2方式截图,否则降低CPU无效.

因为降低CPU是通过降低窗口刷新速度来实现,所以注意,开启此功能以后会导致窗口刷新速度变慢.

EnableFakeActive(

函数简介:

设置是否开启后台假激活功能. 默认是关闭. 一般用不到. 除非有人有特殊需求. 注意看注释.     <收费功能,具体详情点击查看>

函数原型:

long EnableFakeActive(enable)

参数定义:

enable 整形数: 0 关闭
               1 开启

返回值:

整形数:
0: 失败
1: 成功

示例:

// 绑定以后再调用此函数
dm.EnableFakeActive 1
// 这里做需要在窗口非激活状态下,可以操作的接口或者第三方函数

// 恢复
dm.EnableFakeActive 0

注: 此接口的含义并不是关闭或者开启窗口假激活功能(dx.public.active.api或者dx.public.active.message). 而是说有些时候,本来窗口没有激活并且在没有绑定的状态下,可以正常使用的功能,而在窗口绑定以后,并且窗口在非激活状态下,此时由于绑定的锁定导致无法使用. 那么,你就需要把你的部分代码用EnableFakeActive来保护起来。 这样就让我的插件认为你的这段代码是在窗口激活状态下执行.

另外,此函数开启以后,有可能会让前台影响到后台. 所以如果不是特殊情况,最好是关闭. 
EnableKepadPatch
函数简介:

键盘消息发送补丁. 默认是关闭      <收费功能,具体详情点击查看>

函数原型:

long EnableKepadPatch(enable)

参数定义:

enable 整形数: 0 禁止
               1开启  

返回值:

整形数:
0: 失败
1: 成功

示例:


dm_ret = dm.BindWindow(hwnd,"dx","dx2","dx",0)
dm.EnableKeypadPatch 1



注: 此接口必须在绑定之后才能调用。


EnableKeypadSync

函数简介:

键盘消息采用同步发送模式.默认异步.      <收费功能,具体详情点击查看>

函数原型:

long EnableKeypadSync(enable,time_out)

参数定义:

enable 整形数: 0 禁止同步
               1开启同步

time_out 整形数: 单位是毫秒,表示同步等待的最大时间.

返回值:

整形数:
0: 失败
1: 成功

示例:


dm_ret = dm.BindWindow(hwnd,"dx","dx2","dx",0)
dm.EnableKeypadSync 1,200



注: 此接口必须在绑定之后才能调用。

有些时候,如果是异步发送,如果发送动作太快,中间没有延时,有可能下个动作会影响前面的.

而用同步就没有这个担心.



EnableMouseLockPosition(

函数简介:

设置是否打开或者关闭目标窗口的鼠标位置锁定功能(dx.mouse.position.lock.api). 默认是打开. 注意看注释.     <收费功能,具体详情点击查看>

函数原型:

long EnableMouseLockPosition(enable)

参数定义:

enable 整形数: 0 关闭
               1 开启

返回值:

整形数:
0: 失败
1: 成功

示例:

// 绑定以后再调用此函数
dm.MoveTo 100,100
dm.EnableMouseLockPosition 0
// 这里做可能影响前台鼠标的动作
dm.LeftClick
// 恢复
dm.EnableMouseLockPosition 1

注: 部分窗口需要配合这个函数来后台点击. 此接口可以解决部分窗口在点击(地面)会导致前台鼠标跟着移动,并且窗口内容旋转的问题
EnableMouseSync
函数简介:

鼠标消息采用同步发送模式.默认异步.      <收费功能,具体详情点击查看>

函数原型:

long EnableMouseSync(enable,time_out)

参数定义:

enable 整形数: 0 禁止同步
               1开启同步

time_out 整形数: 单位是毫秒,表示同步等待的最大时间.

返回值:

整形数:
0: 失败
1: 成功

示例:


dm_ret = dm.BindWindow(hwnd,"dx","dx2","dx",0)
dm.EnableMouseSync 1,200



注: 此接口必须在绑定之后才能调用。

有些时候,如果是异步发送,如果发送动作太快,中间没有延时,有可能下个动作会影响前面的.

而用同步就没有这个担心.



EnableRealKeypad(



函数简介:

键盘动作模拟真实操作,点击延时随机.      <收费功能,具体详情点击查看>

函数原型:

long EnableRealKeypad(enable)

参数定义:

enable 整形数: 0 关闭模拟
               1 开启模拟

返回值:

整形数:
0: 失败
1: 成功

示例:


dm.EnableRealKeypad 1

dm.KeyPressChar "E"

注: 此接口对KeyPress KeyPressChar KeyPressStr起作用。具体表现是键盘按下和弹起的间隔会在
当前设定延时的基础上,上下随机浮动50%. 假如设定的键盘延时是100,那么这个延时可能就是50-150之间的一个值.

设定延时的函数是 SetKeypadDelay




EnableRealMouse

函数简介:

鼠标动作模拟真实操作,带移动轨迹,以及点击延时随机.      <收费功能,具体详情点击查看>

函数原型:

long EnableRealMouse(enable,mousedelay,mousestep)

参数定义:

enable 整形数: 0 关闭模拟
               1 开启模拟

mousedelay 整形数: 单位是毫秒. 表示在模拟鼠标移动轨迹时,每移动一次的时间间隔.这个值越大,鼠标移动越慢.

Mousestep 整形数: 表示在模拟鼠标移动轨迹时,每移动一次的距离. 这个值越大,鼠标移动越快速.

返回值:

整形数:
0: 失败
1: 成功

示例:


dm.EnableRealMouse 1,20,30

dm.MoveTo 100,100
dm.MoveTo 500,500



注: 此接口同样对LeftClick RightClick MiddleClick LeftDoubleClick起作用。具体表现是鼠标按下和弹起的间隔会在
当前设定延时的基础上,上下随机浮动50%. 假如设定的鼠标延时是100,那么这个延时可能就是50-150之间的一个值.

设定延时的函数是 SetMouseDelay


ForceUnBindWindow


函数简介:

强制解除绑定窗口,并释放系统资源.       <收费功能,具体详情点击查看>

函数原型:

long ForceUnBindWindow(hwnd)

参数定义:

hwnd 整形数: 需要强制解除绑定的窗口句柄.

返回值:

整形数:
0: 失败
1: 成功

示例:


dm_ret = dm.ForceUnBindWindow(hwnd)



注: 此接口一般用在BindWindow和BindWindowEx中,使用了模式1 3 5 7或者属性dx.public.hide.dll后,在线程或者进程结束后,没有正确调用UnBindWindow而导致下次绑定无法成功时,可以先调用这个函数强制解除绑定,并释放资源,再进行绑定.
此接口不可替代UnBindWindow. 只是用在非常时刻. 切记.
一般情况下可以无条件的在BindWindow或者BindWindowEx之前调用一次此函数。保证此刻窗口处于非绑定状态.

IsBind
函数简介:

判定指定窗口是否已经被后台绑定. (前台无法判定)

函数原型:

long IsBind(long hwnd)

参数定义:

hwnd 整形数: 窗口句柄 

返回值:

整形数:
0: 没绑定,或者窗口不存在.
1: 已经绑定.

示例:

dm_ret = dm.IsBind(hwnd)

LockInput

函数简介:

禁止外部输入到指定窗口

函数原型:

long LockInput(long lock)

参数定义:

lock 整形数: 0关闭锁定
       1开启锁定

返回值:

整形数:
0: 失败
1: 成功

示例:


dm_ret = dm.BindWindow(hwnd,"dx","dx2","dx",0)
dm.LockInput 1
// 这里做需要锁定输入做的事情
dm.LockInput 0



注意:此接口只针对dx键鼠. 普通键鼠无效. 

有时候,绑定为dx2 鼠标模式时(或者没有锁定鼠标位置或状态时),在脚本处理过程中,在某个时候需要临时锁定外部输入,以免外部干扰,那么这个函数就非常有用.

比如某个信息,需要鼠标移动到某个位置才可以获取,但这时,如果外部干扰,那么很可能就会获取失败,所以,这时候就很有必要锁定外部输入. 

当然,锁定完以后,记得要解除锁定,否则外部永远都无法输入了,除非解除了窗口绑定.



UnBindWindow
函数简介:

解除绑定窗口,并释放系统资源.一般在OnScriptExit调用

函数原型:

long UnBindWindow()

参数定义:

返回值:

整形数:
0: 失败
1: 成功

示例:


Sub OnScriptExit()
    dm_ret = dm.UnBindWindow() 
End Sub

汇编
AsmAdd
函数简介:

添加指定的MASM汇编指令

函数原型:

long AsmAdd(asm_ins)

参数定义:

asm_ins 字符串:MASM汇编指令,大小写均可以  比如 "mov eax,1"

返回值:

整形数:
0:失败
1:成功

示例:

dm.AsmAdd "push 0100"
dm.AsmAdd "push 060304d"
dm.AsmAdd "call 0678fed"



注: 简单游平台不支持此接口
AsmCall
函数简介:

执行用AsmAdd加到缓冲中的指令

函数原型:

long AsmCall(hwnd,mode)

参数定义:

hwnd 整形数: 窗口句柄

mode 整形数: 模式,取值如下

       0 : 在本进程中进行执行,这时hwnd无效

       1 : 对hwnd指定的进程内执行,注入模式为创建远程线程

返回值:

整形数:
0:失败
1:成功

示例:

dm.AsmClear
dm.AsmAdd "mov eax,1"
dm.AsmAdd "push 0123456"
dm.AsmAdd "call 0343434"
dm.AsmCall hwnd,1



注: 简单游平台不支持此接口

另要注意的是,AsmAdd里所有的数值都是16进制,并且每个数值必须以0打头,否则解析会出错.

多线程下是收费功能, 免费版本多线程会异常. <收费功能,具体详情点击查看>

AsmClear
函数简介:

清除汇编指令缓冲区 用AsmAdd添加到缓冲的指令全部清除

函数原型:

long AsmClear()

参数定义:

返回值:

整形数:
0:失败
1:成功

示例:

dm.AsmClear



注: 简单游平台不支持此接口
AsmCode
函数简介:

把汇编缓冲区的指令转换为机器码 并用16进制字符串的形式输出

函数原型:

string AsmCode(base_addr)

参数定义:

base_addr 字符串: 用AsmAdd添加到缓冲区的第一条指令所在的地址

返回值:

字符串:
机器码,比如 "aa bb cc"这样的形式

示例:

code = dm.AsmCode(&H405940)
MessageBox code



注: 简单游平台不支持此接口
Assemble

函数简介:

把指定的机器码转换为汇编语言输出

函数原型:

string Assemble(asm_code,base_addr,is_upper)

参数定义:

asm_code 字符串: 机器码,形式如 "aa bb cc"这样的16进制表示的字符串(空格无所谓)

base_addr 整形数: 指令所在的地址

is_upper 整形数: 表示转换的汇编语言是否以大写输出

返回值:

字符串:
MASM汇编语言字符串

示例:

dm_ret = dm.Assemble("81 05 E0 5A 47 00 01 00 00 00",&H435fde,0)
MessageBox dm_ret



注: 简单游平台不支持此接口


基本设置
GetBasePath
函数简介:

获取注册在系统中的dm.dll的路径.

函数原型:

string GetBasePath()

参数定义:

返回值:

字符串:
返回dm.dll所在路径

示例:

base_path = dm.GetBasePath()
MessageBox base_path
GetDmCount
函数简介:

返回当前进程已经创建的dm对象个数.       <收费功能,具体详情点击查看>

函数原型:

long GetDmCount()

参数定义:

返回值:

整形数:
个数.

示例:

TracePrint dm.GetDmCount()
GetID
函数简介:

返回当前大漠对象的ID值,这个值对于每个对象是唯一存在的。可以用来判定两个大漠对象是否一致.

函数原型:

long GetID()

参数定义:

返回值:

整形数:
当前对象的ID值.

示例:

TracePrint dm.GetID()

GetLastError

函数简介:

获取插件命令的最后错误

函数原型:

long  GetLastError()

参数定义:

返回值:

整形数:
返回值表示错误值。 0表示无错误.

-1 : 表示你使用了绑定里的收费功能,但是没注册,无法使用.
-2 : 使用模式0 2 4 6时出现,因为目标窗口有保护,或者目标窗口没有以管理员权限打开.常见于win7系统.
-3 : 使用模式0 2 4 6时出现,可能目标窗口有保护,也可能是异常错误.
-4 : 使用模式1 3 5 7 101 103时出现,这是异常错误.
-5 : 使用模式1 3 5 7 101 103时出现, 这个错误的解决办法就是关闭目标窗口,重新打开再绑定即可. 也可能是运行脚本的进程没有管理员权限.
-6 -7 -9 : 使用模式1 3 5 7 101 103时出现,异常错误.
-8 -10 : 使用模式1 3 5 7 101 103时出现, 目标进程可能有保护,也可能是插件版本过老,试试新的或许可以解决.
-11 : 使用模式1 3 5 7 101 103时出现, 目标进程有保护. 告诉我解决。
-12 : 使用模式1 3 5 7 101 103时出现, 目标进程有保护. 告诉我解决。
-13 : 使用模式1 3 5 7 101 103时出现, 目标进程有保护. 告诉我解决。
-14 : 使用模式0 1 4 5时出现, 有可能目标机器兼容性不太好. 可以尝试其他模式. 比如2 3 6 7
-16 : 这个错误有可能是目标窗口有YY. 必须关闭了YY并且重新打开窗口才可以.也有可能使用了绑定模式 0 1 2 3 和 101,然后可能指定了一个子窗口.导致不支持.
可以换模式4 5 6 7或者103来尝试. 另外也可以考虑使用父窗口或者顶级窗口.来避免这个错误。

示例:

TracePrint dm.GetLastError()
GetPath
函数简介:

获取全局路径.(可用于调试)

函数原型:

string GetPath()

参数定义:

返回值:

字符串:
以字符串的形式返回当前设置的全局路径

示例:

path = dm.GetPath()
MessageBox path

Reg
函数简介:

非简单游平台使用,调用此函数来注册,从而使用插件的高级功能. 推荐使用RegEx函数.

函数原型:

long Reg(reg_code)

参数定义:

reg_code 字符串: 注册码. (从大漠插件后台获取)

返回值:

整形数:
-1 : 无法连接网络,(可能防火墙拦截,如果可以正常访问大漠插件网站,那就可以肯定是被防火墙拦截)
-2 : 进程没有以管理员方式运行. (出现在win7 vista 2008.建议关闭uac)
0 : 失败 (未知错误)
1 : 成功
2 : 余额不足
3 : 绑定了本机器,但是账户余额不足50元.
4 : 注册码错误
5 : 你的机器或者IP在黑名单列表中或者不在白名单列表中.

示例:

dm_ret = dm.Reg("abcdefg")
if dm_ret <> 1 then
    MessageBox "注册失败,只能使用免费功能"
end if

注: 简单游平台调用此函数,不会有任何效果. 也不会扣费.

注册码在大漠插件后台可以查看.

此函数每个进程调用一次即可,不需要每个DM对象都调用.

必须保证此函数在创建完对象以后立即调用,尤其必须在绑定窗口之前调用,否则可能会出现异常.

如果有多个进程操作同个窗口,必须保证每个进程要么都调用Reg,要么都不要调用Reg,以免出现异常.

RegEx(
函数简介:

非简单游平台使用,调用此函数来注册,从而使用插件的高级功能.

函数原型:

long RegEx(reg_code,ver_info)

参数定义:

reg_code 字符串: 注册码. (从大漠插件后台获取)

ver_info 字符串: 版本附加信息. 可以在后台详细信息查看. 长度不能超过10. 并且只能包含数字和字母.

返回值:

整形数:
-1 : 无法连接网络,(可能防火墙拦截,如果可以正常访问大漠插件网站,那就可以肯定是被防火墙拦截)
-2 : 进程没有以管理员方式运行. (出现在win7 vista 2008.建议关闭uac)
0 : 失败 (未知错误)
1 : 成功
2 : 余额不足
3 : 绑定了本机器,但是账户余额不足50元.
4 : 注册码错误
5 : 你的机器或者IP在黑名单列表中或者不在白名单列表中.
-8 : 版本附加信息长度超过了10
-9 : 版本附加信息里包含了非法字母.

示例:

dm_ret = dm.RegEx("abcdefg","0001")
if dm_ret <> 1 then
    MessageBox "注册失败,只能使用免费功能"
end if

注: 简单游平台调用此函数,不会有任何效果. 也不会扣费.

注册码在大漠插件后台可以查看.

此函数每个进程调用一次即可,不需要每个DM对象都调用.

必须保证此函数在创建完对象以后立即调用,尤其必须在绑定窗口之前调用,否则可能会出现异常.

如果有多个进程操作同个窗口,必须保证每个进程要么都调用RegEx,要么都不要调用RegEx,以免出现异常.

SetDisplayInput
函数简介:

设定图色的获取方式,默认是显示器或者后台窗口(具体参考BindWindow)

函数原型:

long SetDisplayInput(mode)

参数定义:

mode 字符串: 图色输入模式取值有以下几种

1.     "screen" 这个是默认的模式,表示使用显示器或者后台窗口

2.     "pic:file" 指定输入模式为指定的图片,如果使用了这个模式,则所有和图色相关的函数

均视为对此图片进行处理,比如文字识别查找图片 颜色 等等一切图色函数.

需要注意的是,设定以后,此图片就已经加入了缓冲,如果更改了源图片内容,那么需要
释放此缓冲,重新设置.

返回值:

整形数:
0: 失败

1: 成功

示例:


// 设定为默认的模式
dm_ret = dm.SetDisplayInput("screen")

// 设定为图片模式 图片采用相对路径模式 相对于SetPath的路径
dm_ret = dm.SetDisplayInput("pic:test.bmp")

// 设为图片模式 图片采用绝对路径模式
dm_ret = dm.SetDisplayInput("pic:d: est est.bmp")

// 设为图片模式 但是每次设置前 先清除缓冲
dm_ret = dm.FreePic("test.bmp")
dm_ret = dm.SetDisplayInput("pic:test.bmp")
SetPath

函数简介:

设置全局路径,设置了此路径后,所有接口调用中,相关的文件都相对于此路径. 比如图片,字库等.

函数原型:

long SetPath(path)

参数定义:

path 字符串: 路径,可以是相对路径,也可以是绝对路径

返回值:

整形数:
0: 失败
1: 成功

示例:


// 以下代码把全局路径设置到了c盘根目录
dm_ret = dm.SetPath("c:")

// 如下是把全局路径设置到了相对于当前exe所在的路径
dm.SetPath ".MyData"
// 以上,如果exe在c: esta.exe 那么,就相当于把路径设置到了c: estMyData
SetShowErrorMsg
函数简介:

设置是否弹出错误信息,默认是打开.

函数原型:

long SetShowErrorMsg (show)

参数定义:

show 整形数: 0表示不打开,1表示打开

返回值:

整形数:
0 : 失败

1 : 成功

示例:

dm_ret = dm.SetShowErrorMsg(0)
Ver
函数简介:

返回当前插件版本号

函数原型:

string Ver()

参数定义:

返回值:

字符串:
当前插件的版本描述字符串

示例:


// 返回版本号
ver = dm.Ver()
MessageBox ver
大漠插件在按键中使用,必须用vbs的方式,Plugin的方式使用本插件会有莫名其妙的错误.

这是VBS调用的两种方式了 大家可以按自己喜好,任选一种,我各人比较偏向第一种.



1. 无返回值,不加括号,有返回值必须加括号.

// 以下是鼠标移动的vbs调用范例
例如: 
      dm_ret = dm.MoveTo(30,30)
      或者
      dm.MoveTo 30,30


2.所有调用都加返回值,同时带括号. 


例如: dm_ret = dm.MoveTo(30,30)
      dm_ret = dm.LeftClick() 



从2.1118B版本之后,大漠插件将禁止释放到Plugin目录,以避免一系列升级产生的BUG!
同时,也禁止用Plugin方式来调用插件,那个方式也是非常不安全的.
请大家严格按照vbs的语法来使用插件.

键鼠
GetCursorShape

函数简介:

获取鼠标特征码. 当BindWindow或者BindWindowEx中的mouse参数含有dx.mouse.cursor时,

获取到的是后台鼠标特征,否则是前台鼠标特征.   后台特征码是收费功能. <收费功能,具体详情点击查看>.

函数原型:

string GetCursorShape()

参数定义:

返回值:

字符串:
成功时,返回鼠标特征码.  
失败时,返回空的串.

示例:


mouse_tz = dm.GetCursorShape()
If mouse_tz = "7d7160fe" Then
    MessageBox "找到特征码"
End If

注:此接口和GetCursorShapeEx(0)等效. 相当于工具里的方式1获取的特征码. 当此特征码在某些情况下无法区分鼠标形状时,可以考虑使用GetCursorShapeEx(1).
GetCursorShapeEx
函数简介:

获取鼠标特征码. 当BindWindow或者BindWindowEx中的mouse参数含有dx.mouse.cursor时,

获取到的是后台鼠标特征,否则是前台鼠标特征.   后台特征码是收费功能. <收费功能,具体详情点击查看>.

函数原型:

string GetCursorShapeEx(int type)

参数定义:

type 整形数:获取鼠标特征码的方式. 和工具中的方式1 方式2对应. 方式1此参数值为0. 方式2此参数值为1.

返回值:

字符串:
成功时,返回鼠标特征码.  
失败时,返回空的串.

示例:


mouse_tz = dm.GetCursorShapeEx(0)
If mouse_tz = "7d7160fe" Then
    MessageBox "找到特征码"
End If

注: 当type为0时,和GetCursorShape等效.
GetCursorSpot
函数简介:

获取鼠标热点位置.(参考工具中抓取鼠标后,那个闪动的点就是热点坐标,不是鼠标坐标)

当BindWindow或者BindWindowEx中的mouse参数含有dx.mouse.cursor时,

获取到的是后台鼠标热点位置,否则是前台鼠标热点位置.  后台热点位置是收费功能. <收费功能,具体详情点击查看>.

函数原型:

string GetCursorSpot()

参数定义:

返回值:

字符串:
成功时,返回形如"x,y"的字符串  
失败时,返回空的串.

示例:


hot_pos = dm.GetCursorSpot()
if len(hot_pos) > 0 Then
    hot_pos = split(hot_pos,",")
    x = int(hot_pos(0))
    y = int(hot_pos(1))
end if

KeyDown

函数简介:

按住指定的虚拟键码

函数原型:

long KeyDown(vk_code)

参数定义:

vk_code 整形数:虚拟按键码

返回值:

整形数:
0:失败
1:成功

示例:

dm.KeyDown 13
KeyDownChar
函数简介:

按住指定的虚拟键码

函数原型:

long KeyDownChar(key_str)

参数定义:

key_str 字符串: 字符串描述的键码. 大小写无所谓. 点这里查看具体对应关系.

返回值:

整形数:
0:失败
1:成功

示例:

dm.KeyDownChar "enter"
dm.KeyDownChar "1"
dm.KeyDownChar "F1"
dm.KeyDownChar "a"
dm.KeyDownChar "B"

KeyPress

函数简介:

按下指定的虚拟键码

函数原型:

long KeyPress(vk_code)

参数定义:

vk_code 整形数:虚拟按键码

返回值:

整形数:
0:失败
1:成功

示例:


dm.KeyPress 13
KeyPressChar
函数简介:

按下指定的虚拟键码

函数原型:

long KeyPressChar(key_str)

参数定义:

key_str 字符串: 字符串描述的键码. 大小写无所谓. 点这里查看具体对应关系.

返回值:

整形数:
0:失败
1:成功

示例:


dm.KeyPressChar "enter"
dm.KeyPressChar "1"
dm.KeyPressChar "F1"
dm.KeyPressChar "a"
dm.KeyPressChar "B"
KeyPressStr
函数简介:

根据指定的字符串序列,依次按顺序按下其中的字符.   <收费功能,具体详情点击查看>.

函数原型:

long KeyPressStr(key_str,delay)

参数定义:

key_str 字符串: 需要按下的字符串序列. 比如"1234","abcd","7389,1462"等.

delay 整形数: 每按下一个按键,需要延时多久. 单位毫秒.这个值越大,按的速度越慢。

返回值:

整形数:
0:失败
1:成功

示例:


dm.KeyPressStr "123,456",20

注: 在某些情况下,SendString和SendString2都无法输入文字时,可以考虑用这个来输入.

但这个接口只支持"a-z 0-9 ~-=[];',./"和空格,其它字符一律不支持.(包括中国)
KeyUp

函数简介:

弹起来虚拟键vk_code

函数原型:

long KeyUp(vk_code)

参数定义:

vk_code 整形数:虚拟按键码

返回值:

整形数:
0:失败
1:成功

示例:


dm.KeyUp 13
KeyUpChar
函数简介:

弹起来虚拟键key_str

函数原型:

long KeyUpChar(key_str)

参数定义:

key_str 字符串: 字符串描述的键码. 大小写无所谓. 点这里查看具体对应关系.

返回值:

整形数:
0:失败
1:成功

示例:


dm.KeyUpChar "enter"
dm.KeyUpChar "1"
dm.KeyUpChar "F1"
dm.KeyUpChar "a"
dm.KeyUpChar "B"
LeftClick
函数简介:

按下鼠标左键

函数原型:

long LeftClick()

参数定义:

返回值:

整形数:
0:失败
1:成功

示例:


dm.LeftClick
LeftDoubleClick
函数简介:

双击鼠标左键

函数原型:

long LeftDoubleClick()

参数定义:

返回值:

整形数:
0:失败
1:成功

示例:


dm.LeftDoubleClick
LeftDown
函数简介:

按住鼠标左键

函数原型:

long LeftDown()

参数定义:

返回值:

整形数:
0:失败
1:成功

示例:


dm.LeftDown
LeftUp
函数简介:

弹起鼠标左键

函数原型:

long LeftUp()

参数定义:

返回值:

整形数:
0:失败
1:成功

示例:


dm.LeftUp
MiddleClick
函数简介:

按下鼠标中键

函数原型:

long MiddleClick()

参数定义:

返回值:

整形数:
0:失败
1:成功

示例:

dm.MiddleClick
MoveR
函数简介:

鼠标相对于上次的位置移动rx,ry

函数原型:

long MoveR(rx,ry)

参数定义:

rx 整形数:相对于上次的X偏移
ry 整形数:相对于上次的Y偏移

返回值:

整形数:
0:失败
1:成功

示例:


dm.MoveR rx,ry
MoveTo
函数简介:

把鼠标移动到目的点(x,y)

函数原型:

long MoveTo(x,y)

参数定义:

x 整形数:X坐标
y 整形数:Y坐标

返回值:

整形数:
0:失败
1:成功

示例:


dm.MoveTo x,y
RightClick
函数简介:

按下鼠标右键

函数原型:

long RightClick()

参数定义:

返回值:

整形数:
0:失败
1:成功

示例:


dm.RightClick
long RightDown
函数简介:

按住鼠标右键

函数原型:

long RightDown()

参数定义:

返回值:

整形数:
0:失败
1:成功

示例:


dm.RightDown
RightUp
函数简介:

弹起鼠标右键

函数原型:

long RightUp()

参数定义:

返回值:

整形数:
0:失败
1:成功

示例:


dm.RightUp
SetKeypadDelay
函数简介:

设置按键时,键盘按下和弹起的时间间隔。高级用户使用。某些窗口可能需要调整这个参数才可以正常按键。

函数原型:

long SetKeypadDelay(type,delay)

参数定义:

type 字符串: 键盘类型,取值有以下

     "normal" : 对应normal键盘  默认内部延时为30ms

     "windows": 对应windows 键盘 默认内部延时为10ms

     "dx" :     对应dx 键盘 默认内部延时为50ms

delay 整形数: 延时,单位是毫秒

返回值:

整形数:
0:失败
1:成功

示例:

dm.SetKeypadDelay "dx",10



注 : 此函数影响的接口有KeyPress

SetMouseDelay
函数简介:

设置鼠标单击或者双击时,鼠标按下和弹起的时间间隔。高级用户使用。某些窗口可能需要调整这个参数才可以正常点击。

函数原型:

long SetMouseDelay(type,delay)

参数定义:

type 字符串: 鼠标类型,取值有以下

     "normal" : 对应normal鼠标 默认内部延时为 30ms

     "windows": 对应windows 鼠标 默认内部延时为 10ms

     "dx" :     对应dx鼠标 默认内部延时为40ms

delay 整形数: 延时,单位是毫秒

返回值:

整形数:
0:失败
1:成功

示例:

dm.SetMouseDelay "dx",10



注 : 此函数影响的接口有LeftClick RightClick MiddleClick LeftDoubleClick

WheelDown

函数简介:

滚轮向下滚

函数原型:

long WheelDown()

参数定义:

返回值:

整形数:
0:失败
1:成功

示例:


dm.WheelDown
WheelUp
函数简介:

滚轮向上滚

函数原型:

long WheelUp()

参数定义:

返回值:

整形数:
0:失败
1:成功

示例:


dm.WheelUp

内存

函数简介:

搜索指定的二进制数据,默认步长是1.如果要定制步长,请用FindDataEx

函数原型:

string FindData(hwnd, addr_range, data)

参数定义:

hwnd 整形数: 指定搜索的窗口句柄或者进程ID.  默认是窗口句柄. 如果要指定为进程ID,需要调用SetMemoryHwndAsProcessId.

addr_range 字符串: 指定搜索的地址集合,字符串类型,这个地方可以是上次FindXXX的返回地址集合,可以进行二次搜索.(类似CE的再次扫描)

             如果要进行地址范围搜索,那么这个值为的形如如下(类似于CE的新搜索)

            "00400000-7FFFFFFF" "80000000-BFFFFFFF" "00000000-FFFFFFFF" 等.

data 字符串: 要搜索的二进制数据 以字符串的形式描述比如"00 01 23 45 67 86 ab ce f1"等

返回值:

字符串:
返回搜索到的地址集合,地址格式如下:

"addr1|addr2|addr3…|addrn"

比如"400050|423435|453430"

示例:

// 全局搜索
result = dm.FindData(hwnd,"00000000-FFFFFFFF","00 01 23 45 67 86 ab ce f1")
if len(result) = 0 then
     MessageBox "找不到"
     EndScript
end if

result = split(result,"|")
count = ubound(result)+1
MessageBox "找到"&count&"个地址"

注: 如果目标窗口的绑定属性中有dx.public.memory,并且是用本对象来绑定的,那么操作方式是直接进入目标进程读写.
dx.public.memory可突破部分窗口读写保护. 如果正常方式无法读写,可以尝试此属性。
FindDataEx
函数简介:

搜索指定的二进制数据. <收费功能,具体详情点击查看>.

函数原型:

string FindDataEx(hwnd, addr_range, data,step,multi_thread,mode)

参数定义:

hwnd 整形数: 指定搜索的窗口句柄或者进程ID.  默认是窗口句柄. 如果要指定为进程ID,需要调用SetMemoryHwndAsProcessId.

addr_range 字符串: 指定搜索的地址集合,字符串类型,这个地方可以是上次FindXXX的返回地址集合,可以进行二次搜索.(类似CE的再次扫描)

             如果要进行地址范围搜索,那么这个值为的形如如下(类似于CE的新搜索)

            "00400000-7FFFFFFF" "80000000-BFFFFFFF" "00000000-FFFFFFFF" 等.

data 字符串: 要搜索的二进制数据 以字符串的形式描述比如"00 01 23 45 67 86 ab ce f1"等

step 整形数: 搜索步长.

multi_thread整形数:表示是否开启多线程查找.  0不开启,1开启.
                   开启多线程查找速度较快,但会耗费较多CPU资源. 不开启速度较慢,但节省CPU.

mode 整形数: 1 表示开启快速扫描(略过只读内存)  0表示所有内存类型全部扫描.

返回值:

字符串:
返回搜索到的地址集合,地址格式如下:

"addr1|addr2|addr3…|addrn"

比如"400050|423435|453430"

示例:

// 全局搜索
result = dm.FindDataEx(hwnd,"00000000-FFFFFFFF","00 01 23 45 67 86 ab ce f1",4,1,0)
if len(result) = 0 then
     MessageBox "找不到"
     EndScript
end if

result = split(result,"|")
count = ubound(result)+1
MessageBox "找到"&count&"个地址"

注: 如果目标窗口的绑定属性中有dx.public.memory,并且是用本对象来绑定的,那么操作方式是直接进入目标进程读写.
dx.public.memory可突破部分窗口读写保护. 如果正常方式无法读写,可以尝试此属性。

FindDouble

函数简介:

搜索指定的双精度浮点数,默认步长是1.如果要定制步长,请用FindDoubleEx

函数原型:

string FindDouble(hwnd, addr_range, double_value_min, double_value_max)

参数定义:

hwnd 整形数: 指定搜索的窗口句柄或者进程ID.  默认是窗口句柄. 如果要指定为进程ID,需要调用SetMemoryHwndAsProcessId.

addr_range 字符串: 指定搜索的地址集合,字符串类型,这个地方可以是上次FindXXX的返回地址集合,可以进行二次搜索.(类似CE的再次扫描)

             如果要进行地址范围搜索,那么这个值为的形如如下(类似于CE的新搜索)

            "00400000-7FFFFFFF" "80000000-BFFFFFFF" "00000000-FFFFFFFF" 等.

double_value_min 双精度浮点数: 搜索的双精度数值最小值

double_value_max 双精度浮点数: 搜索的双精度数值最大值 

最终搜索的数值大与等于double_value_min,并且小于等于double_value_max

返回值:

字符串:
返回搜索到的地址集合,地址格式如下:

"addr1|addr2|addr3…|addrn"

比如"400050|423435|453430"

示例:

// 全局搜索
result = dm.FindDouble(hwnd,"00000000-FFFFFFFF",0.5,1.0)
if len(result) = 0 then
     MessageBox "找不到"
     EndScript
end if

result = split(result,"|")
count = ubound(result)+1
MessageBox "找到"&count&"个地址"


注: 如果目标窗口的绑定属性中有dx.public.memory,并且是用本对象来绑定的,那么操作方式是直接进入目标进程读写.
dx.public.memory可突破部分窗口读写保护. 如果正常方式无法读写,可以尝试此属性。
FindDoubleEx
函数简介:

搜索指定的双精度浮点数. <收费功能,具体详情点击查看>

函数原型:

string FindDoubleEx(hwnd, addr_range, double_value_min, double_value_max,step,multi_thread,mode)

参数定义:

hwnd 整形数: 指定搜索的窗口句柄或者进程ID.  默认是窗口句柄. 如果要指定为进程ID,需要调用SetMemoryHwndAsProcessId.

addr_range 字符串: 指定搜索的地址集合,字符串类型,这个地方可以是上次FindXXX的返回地址集合,可以进行二次搜索.(类似CE的再次扫描)

             如果要进行地址范围搜索,那么这个值为的形如如下(类似于CE的新搜索)

            "00400000-7FFFFFFF" "80000000-BFFFFFFF" "00000000-FFFFFFFF" 等.

double_value_min 双精度浮点数: 搜索的双精度数值最小值

double_value_max 双精度浮点数: 搜索的双精度数值最大值 

最终搜索的数值大与等于double_value_min,并且小于等于double_value_max

step 整形数: 搜索步长.

multi_thread整形数:表示是否开启多线程查找.  0不开启,1开启.
                   开启多线程查找速度较快,但会耗费较多CPU资源. 不开启速度较慢,但节省CPU.

mode 整形数: 1 表示开启快速扫描(略过只读内存)  0表示所有内存类型全部扫描.

返回值:

字符串:
返回搜索到的地址集合,地址格式如下:

"addr1|addr2|addr3…|addrn"

比如"400050|423435|453430"

示例:

// 全局搜索
result = dm.FindDoubleEx(hwnd,"00000000-FFFFFFFF",0.5,1.0,8,1)
if len(result) = 0 then
     MessageBox "找不到"
     EndScript
end if

result = split(result,"|")
count = ubound(result)+1
MessageBox "找到"&count&"个地址"

注: 如果目标窗口的绑定属性中有dx.public.memory,并且是用本对象来绑定的,那么操作方式是直接进入目标进程读写.
dx.public.memory可突破部分窗口读写保护. 如果正常方式无法读写,可以尝试此属性。

FindFloat
函数简介:

搜索指定的单精度浮点数,默认步长是1.如果要定制步长,请用FindFloatEx

函数原型:

string FindFloat(hwnd, addr_range, float_value_min, float_value_max)

参数定义:

hwnd 整形数: 指定搜索的窗口句柄或者进程ID.  默认是窗口句柄. 如果要指定为进程ID,需要调用SetMemoryHwndAsProcessId.

addr_range 字符串: 指定搜索的地址集合,字符串类型,这个地方可以是上次FindXXX的返回地址集合,可以进行二次搜索.(类似CE的再次扫描)

             如果要进行地址范围搜索,那么这个值为的形如如下(类似于CE的新搜索)

            "00400000-7FFFFFFF" "80000000-BFFFFFFF" "00000000-FFFFFFFF" 等.

float_value_min 单精度浮点数: 搜索的单精度数值最小值

float_value_max 单精度浮点数: 搜索的单精度数值最大值 

最终搜索的数值大与等于float_value_min,并且小于等于float_value_max

返回值:

字符串:
返回搜索到的地址集合,地址格式如下:

"addr1|addr2|addr3…|addrn"

比如"400050|423435|453430"

示例:

// 全局搜索
result = dm.FindFloat(hwnd,"00000000-FFFFFFFF",0.5,1.0)
if len(result) = 0 then
     MessageBox "找不到"
     EndScript
end if

result = split(result,"|")
count = ubound(result)+1
MessageBox "找到"&count&"个地址"


注: 如果目标窗口的绑定属性中有dx.public.memory,并且是用本对象来绑定的,那么操作方式是直接进入目标进程读写.
dx.public.memory可突破部分窗口读写保护. 如果正常方式无法读写,可以尝试此属性。

FindFloatEx(
函数简介:

搜索指定的单精度浮点数. <收费功能,具体详情点击查看>

函数原型:

string FindFloatEx(hwnd, addr_range, float_value_min, float_value_max,step,multi_thread,mode)

参数定义:

hwnd 整形数: 指定搜索的窗口句柄或者进程ID.  默认是窗口句柄. 如果要指定为进程ID,需要调用SetMemoryHwndAsProcessId.

addr_range 字符串: 指定搜索的地址集合,字符串类型,这个地方可以是上次FindXXX的返回地址集合,可以进行二次搜索.(类似CE的再次扫描)

             如果要进行地址范围搜索,那么这个值为的形如如下(类似于CE的新搜索)

            "00400000-7FFFFFFF" "80000000-BFFFFFFF" "00000000-FFFFFFFF" 等.

float_value_min 单精度浮点数: 搜索的单精度数值最小值

float_value_max 单精度浮点数: 搜索的单精度数值最大值 

最终搜索的数值大与等于float_value_min,并且小于等于float_value_max

step 整形数: 搜索步长.

multi_thread整形数:表示是否开启多线程查找.  0不开启,1开启.
                   开启多线程查找速度较快,但会耗费较多CPU资源. 不开启速度较慢,但节省CPU.

mode 整形数: 1 表示开启快速扫描(略过只读内存)  0表示所有内存类型全部扫描.

返回值:

字符串:
返回搜索到的地址集合,地址格式如下:

"addr1|addr2|addr3…|addrn"

比如"400050|423435|453430"

示例:

// 全局搜索
result = dm.FindFloatEx(hwnd,"00000000-FFFFFFFF",0.5,1.0,4,1)
if len(result) = 0 then
     MessageBox "找不到"
     EndScript
end if

result = split(result,"|")
count = ubound(result)+1
MessageBox "找到"&count&"个地址"

注: 如果目标窗口的绑定属性中有dx.public.memory,并且是用本对象来绑定的,那么操作方式是直接进入目标进程读写.
dx.public.memory可突破部分窗口读写保护. 如果正常方式无法读写,可以尝试此属性。
FindInt
函数简介:

搜索指定的整数,默认步长是1.如果要定制步长,请用FindIntEx

函数原型:

string FindInt(hwnd, addr_range, int_value_min, int_value_max,type)

参数定义:

hwnd 整形数: 指定搜索的窗口句柄或者进程ID.  默认是窗口句柄. 如果要指定为进程ID,需要调用SetMemoryHwndAsProcessId.

addr_range 字符串: 指定搜索的地址集合,字符串类型,这个地方可以是上次FindXXX的返回地址集合,可以进行二次搜索.(类似CE的再次扫描)

             如果要进行地址范围搜索,那么这个值为的形如如下(类似于CE的新搜索)

            "00400000-7FFFFFFF" "80000000-BFFFFFFF" "00000000-FFFFFFFF" 等.

int_value_min 整形数: 搜索的整数数值最小值

int_value_max 整形数: 搜索的整数数值最大值 

最终搜索的数值大与等于int_value_min,并且小于等于int_value_max

type 整形数: 搜索的整数类型,取值如下

      0 : 32位

      1 : 16 位

      2 : 8位

返回值:

字符串:
返回搜索到的地址集合,地址格式如下:

"addr1|addr2|addr3…|addrn"

比如"400050|423435|453430"

示例:

// 全局搜索
result = dm.FindInt(hwnd,"00000000-FFFFFFFF",300,300,0)
if len(result) = 0 then
     MessageBox "找不到"
     EndScript
end if

result = split(result,"|")
count = ubound(result)+1
MessageBox "找到"&count&"个地址"

注: 如果目标窗口的绑定属性中有dx.public.memory,并且是用本对象来绑定的,那么操作方式是直接进入目标进程读写.
dx.public.memory可突破部分窗口读写保护. 如果正常方式无法读写,可以尝试此属性。

FindIntEx

函数简介:

搜索指定的整数. <收费功能,具体详情点击查看>

函数原型:

string FindIntEx(hwnd, addr_range, int_value_min, int_value_max,type,step,multi_thread,mode)

参数定义:

hwnd 整形数: 指定搜索的窗口句柄或者进程ID.  默认是窗口句柄. 如果要指定为进程ID,需要调用SetMemoryHwndAsProcessId.

addr_range 字符串: 指定搜索的地址集合,字符串类型,这个地方可以是上次FindXXX的返回地址集合,可以进行二次搜索.(类似CE的再次扫描)

             如果要进行地址范围搜索,那么这个值为的形如如下(类似于CE的新搜索)

            "00400000-7FFFFFFF" "80000000-BFFFFFFF" "00000000-FFFFFFFF" 等.

int_value_min 整形数: 搜索的整数数值最小值

int_value_max 整形数: 搜索的整数数值最大值 

最终搜索的数值大与等于int_value_min,并且小于等于int_value_max

type 整形数: 搜索的整数类型,取值如下

      0 : 32位

      1 : 16 位

      2 : 8位

step 整形数: 搜索步长.

multi_thread整形数:表示是否开启多线程查找.  0不开启,1开启.
                   开启多线程查找速度较快,但会耗费较多CPU资源. 不开启速度较慢,但节省CPU.

mode 整形数: 1 表示开启快速扫描(略过只读内存)  0表示所有内存类型全部扫描.

返回值:

字符串:
返回搜索到的地址集合,地址格式如下:

"addr1|addr2|addr3…|addrn"

比如"400050|423435|453430"

示例:

// 全局搜索
result = dm.FindIntEx(hwnd,"00000000-FFFFFFFF",300,300,0,2,1)
if len(result) = 0 then
     MessageBox "找不到"
     EndScript
end if

result = split(result,"|")
count = ubound(result)+1
MessageBox "找到"&count&"个地址"

注: 如果目标窗口的绑定属性中有dx.public.memory,并且是用本对象来绑定的,那么操作方式是直接进入目标进程读写.
dx.public.memory可突破部分窗口读写保护. 如果正常方式无法读写,可以尝试此属性。
FindString

函数简介:

搜索指定的字符串,默认步长是1.如果要定制步长,请用FindStringEx

函数原型:

string FindString(hwnd, addr_range, string_value,type)

参数定义:

hwnd 整形数: 指定搜索的窗口句柄或者进程ID.  默认是窗口句柄. 如果要指定为进程ID,需要调用SetMemoryHwndAsProcessId.

addr_range 字符串: 指定搜索的地址集合,字符串类型,这个地方可以是上次FindXXX的返回地址集合,可以进行二次搜索.(类似CE的再次扫描)

             如果要进行地址范围搜索,那么这个值为的形如如下(类似于CE的新搜索)

            "00400000-7FFFFFFF" "80000000-BFFFFFFF" "00000000-FFFFFFFF" 等.

string_value 字符串: 搜索的字符串

type 整形数: 搜索的字符串类型,取值如下

      0 : Ascii字符串

      1 : Unicode字符串

返回值:

字符串:
返回搜索到的地址集合,地址格式如下:

"addr1|addr2|addr3…|addrn"

比如"400050|423435|453430"

示例:

// 全局搜索
result = dm.FindString(hwnd,"00000000-FFFFFFFF","哈哈哈哈",0)
if len(result) = 0 then
     MessageBox "找不到"
     EndScript
end if

result = split(result,"|")
count = ubound(result)+1
MessageBox "找到"&count&"个地址"

注: 如果目标窗口的绑定属性中有dx.public.memory,并且是用本对象来绑定的,那么操作方式是直接进入目标进程读写.
dx.public.memory可突破部分窗口读写保护. 如果正常方式无法读写,可以尝试此属性。
FindStringEx
函数简介:

搜索指定的字符串,默认步长是1.如果要定制步长,请用FindStringEx

函数原型:

string FindString(hwnd, addr_range, string_value,type)

参数定义:

hwnd 整形数: 指定搜索的窗口句柄或者进程ID.  默认是窗口句柄. 如果要指定为进程ID,需要调用SetMemoryHwndAsProcessId.

addr_range 字符串: 指定搜索的地址集合,字符串类型,这个地方可以是上次FindXXX的返回地址集合,可以进行二次搜索.(类似CE的再次扫描)

             如果要进行地址范围搜索,那么这个值为的形如如下(类似于CE的新搜索)

            "00400000-7FFFFFFF" "80000000-BFFFFFFF" "00000000-FFFFFFFF" 等.

string_value 字符串: 搜索的字符串

type 整形数: 搜索的字符串类型,取值如下

      0 : Ascii字符串

      1 : Unicode字符串

返回值:

字符串:
返回搜索到的地址集合,地址格式如下:

"addr1|addr2|addr3…|addrn"

比如"400050|423435|453430"

示例:

// 全局搜索
result = dm.FindString(hwnd,"00000000-FFFFFFFF","哈哈哈哈",0)
if len(result) = 0 then
     MessageBox "找不到"
     EndScript
end if

result = split(result,"|")
count = ubound(result)+1
MessageBox "找到"&count&"个地址"

注: 如果目标窗口的绑定属性中有dx.public.memory,并且是用本对象来绑定的,那么操作方式是直接进入目标进程读写.
dx.public.memory可突破部分窗口读写保护. 如果正常方式无法读写,可以尝试此属性。

FindStringEx
函数简介:

搜索指定的字符串. <收费功能,具体详情点击查看>

函数原型:

string FindStringEx(hwnd, addr_range, string_value,type,step,multi_thread,mode)

参数定义:

hwnd 整形数: 指定搜索的窗口句柄或者进程ID.  默认是窗口句柄. 如果要指定为进程ID,需要调用SetMemoryHwndAsProcessId.

addr_range 字符串: 指定搜索的地址集合,字符串类型,这个地方可以是上次FindXXX的返回地址集合,可以进行二次搜索.(类似CE的再次扫描)

             如果要进行地址范围搜索,那么这个值为的形如如下(类似于CE的新搜索)

            "00400000-7FFFFFFF" "80000000-BFFFFFFF" "00000000-FFFFFFFF" 等.

string_value 字符串: 搜索的字符串

type 整形数: 搜索的字符串类型,取值如下

      0 : Ascii字符串

      1 : Unicode字符串

step 整形数: 搜索步长.

multi_thread整形数:表示是否开启多线程查找.  0不开启,1开启.
                   开启多线程查找速度较快,但会耗费较多CPU资源. 不开启速度较慢,但节省CPU.

mode 整形数: 1 表示开启快速扫描(略过只读内存)  0表示所有内存类型全部扫描.

返回值:

字符串:
返回搜索到的地址集合,地址格式如下:

"addr1|addr2|addr3…|addrn"

比如"400050|423435|453430"

示例:

// 全局搜索
result = dm.FindStringEx(hwnd,"00000000-FFFFFFFF","哈哈哈哈",0,2,1)
if len(result) = 0 then
     MessageBox "找不到"
     EndScript
end if

result = split(result,"|")
count = ubound(result)+1
MessageBox "找到"&count&"个地址"

注: 如果目标窗口的绑定属性中有dx.public.memory,并且是用本对象来绑定的,那么操作方式是直接进入目标进程读写.
dx.public.memory可突破部分窗口读写保护. 如果正常方式无法读写,可以尝试此属性。
GetModuleBaseAddr

函数简介:

根据指定的窗口句柄,来获取对应窗口句柄进程下的指定模块的基址

函数原型:

long GetModuleBaseAddr(hwnd,module)

参数定义:

hwnd 整形数: 指定搜索的窗口句柄或者进程ID.  默认是窗口句柄. 如果要指定为进程ID,需要调用SetMemoryHwndAsProcessId.

module 字符串: 模块名

返回值:

整形数:
模块的基址

示例:

base_addr = dm.GetModuleBaseAddr(hwnd,"gdi32.dll")
MessageBox  base_addr



注: 如果目标窗口的绑定属性中有dx.public.memory,并且是用本对象来绑定的,那么操作方式是直接进入目标进程读写.
dx.public.memory可突破部分窗口读写保护. 如果正常方式无法读写,可以尝试此属性。
ReadData(
函数简介:

读取指定地址的二进制数据

函数原型:

string ReadData(hwnd,addr,len)

参数定义:

hwnd 整形数: 指定搜索的窗口句柄或者进程ID.  默认是窗口句柄. 如果要指定为进程ID,需要调用SetMemoryHwndAsProcessId.

addr 字符串: 用字符串来描述地址,类似于CE的地址描述,数值必须是16进制,里面可以用[ ] + -这些符号来描述一个地址。+表示地址加,-表示地址减
       模块名必须用<>符号来圈起来

      例如:

1.         "4DA678" 最简单的方式,用绝对数值来表示地址

2.         "<360SE.exe>+DA678" 相对简单的方式,只是这里用模块名来决定模块基址,后面的是偏移

3.         "[4DA678]+3A" 用绝对数值加偏移,相当于一级指针

4.         "[<360SE.exe>+DA678]+3A" 用模块定基址的方式,也是一级指针

5.         "[[[<360SE.exe>+DA678]+3A]+5B]+8" 这个是一个三级指针

总之熟悉CE的人 应该对这个地址描述都很熟悉,我就不多举例了

len 整形数: 二进制数据的长度

返回值:

字符串:
读取到的数值,以16进制表示的字符串 每个字节以空格相隔 比如"12 34 56 78 ab cd ef"

示例:

value = dm.ReadData(hwnd,"4DA678",10)
MessageBox  value



注: 如果目标窗口的绑定属性中有dx.public.memory,并且是用本对象来绑定的,那么操作方式是直接进入目标进程读写.
dx.public.memory可突破部分窗口读写保护. 如果正常方式无法读写,可以尝试此属性。
ReadDouble(
函数简介:

读取指定地址的双精度浮点数

函数原型:

double ReadDouble(hwnd,addr)

参数定义:

hwnd 整形数: 指定搜索的窗口句柄或者进程ID.  默认是窗口句柄. 如果要指定为进程ID,需要调用SetMemoryHwndAsProcessId.

addr 字符串: 用字符串来描述地址,类似于CE的地址描述,数值必须是16进制,里面可以用[ ] + -这些符号来描述一个地址。+表示地址加,-表示地址减
       模块名必须用<>符号来圈起来

      例如:

1.         "4DA678" 最简单的方式,用绝对数值来表示地址

2.         "<360SE.exe>+DA678" 相对简单的方式,只是这里用模块名来决定模块基址,后面的是偏移

3.         "[4DA678]+3A" 用绝对数值加偏移,相当于一级指针

4.         "[<360SE.exe>+DA678]+3A" 用模块定基址的方式,也是一级指针

5.         "[[[<360SE.exe>+DA678]+3A]+5B]+8" 这个是一个三级指针

总之熟悉CE的人 应该对这个地址描述都很熟悉,我就不多举例了

返回值:

双精度浮点数:
读取到的数值,注意这里无法判断读取是否成功

示例:

value = dm.ReadDouble(hwnd,"4DA678")
MessageBox  value



注: 如果目标窗口的绑定属性中有dx.public.memory,并且是用本对象来绑定的,那么操作方式是直接进入目标进程读写.
dx.public.memory可突破部分窗口读写保护. 如果正常方式无法读写,可以尝试此属性。
ReadFloat(
函数简介:

读取指定地址的单精度浮点数

函数原型:

float ReadFloat(hwnd,addr)

参数定义:

hwnd 整形数: 指定搜索的窗口句柄或者进程ID.  默认是窗口句柄. 如果要指定为进程ID,需要调用SetMemoryHwndAsProcessId.

addr 字符串: 用字符串来描述地址,类似于CE的地址描述,数值必须是16进制,里面可以用[ ] + -这些符号来描述一个地址。+表示地址加,-表示地址减
       模块名必须用<>符号来圈起来

      例如:

1.         "4DA678" 最简单的方式,用绝对数值来表示地址

2.         "<360SE.exe>+DA678" 相对简单的方式,只是这里用模块名来决定模块基址,后面的是偏移

3.         "[4DA678]+3A" 用绝对数值加偏移,相当于一级指针

4.         "[<360SE.exe>+DA678]+3A" 用模块定基址的方式,也是一级指针

5.         "[[[<360SE.exe>+DA678]+3A]+5B]+8" 这个是一个三级指针

总之熟悉CE的人 应该对这个地址描述都很熟悉,我就不多举例了

返回值:

单精度浮点数:
读取到的数值,注意这里无法判断读取是否成功

示例:

value = dm.ReadFloat(hwnd,"4DA678")
MessageBox  value



注: 如果目标窗口的绑定属性中有dx.public.memory,并且是用本对象来绑定的,那么操作方式是直接进入目标进程读写.
dx.public.memory可突破部分窗口读写保护. 如果正常方式无法读写,可以尝试此属性。

ReadInt
函数简介:

读取指定地址的整数数值,类型可以是8位,16位 或者 32位

函数原型:

long ReadInt(hwnd,addr,type)

参数定义:

hwnd 整形数: 指定搜索的窗口句柄或者进程ID.  默认是窗口句柄. 如果要指定为进程ID,需要调用SetMemoryHwndAsProcessId.

addr 字符串: 用字符串来描述地址,类似于CE的地址描述,数值必须是16进制,里面可以用[ ] + -这些符号来描述一个地址。+表示地址加,-表示地址减
       模块名必须用<>符号来圈起来

      例如:

1.         "4DA678" 最简单的方式,用绝对数值来表示地址

2.         "<360SE.exe>+DA678" 相对简单的方式,只是这里用模块名来决定模块基址,后面的是偏移

3.         "[4DA678]+3A" 用绝对数值加偏移,相当于一级指针

4.         "[<360SE.exe>+DA678]+3A" 用模块定基址的方式,也是一级指针

5.         "[[[<360SE.exe>+DA678]+3A]+5B]+8" 这个是一个三级指针

总之熟悉CE的人 应该对这个地址描述都很熟悉,我就不多举例了

type 整形数: 整数类型,取值如下

      0 : 32位

      1 : 16 位

      2 : 8位

返回值:

整形数:
读取到的数值,注意这里无法判断读取是否成功

示例:

value = dm.ReadInt(hwnd,"4DA678",0)
MessageBox  value



注: 如果目标窗口的绑定属性中有dx.public.memory,并且是用本对象来绑定的,那么操作方式是直接进入目标进程读写.
dx.public.memory可突破部分窗口读写保护. 如果正常方式无法读写,可以尝试此属性。

ReadString(
函数简介:

读取指定地址的字符串,可以是GBK字符串或者是Unicode字符串.(必须事先知道内存区的字符串编码方式)

函数原型:

string ReadString(hwnd,addr,type,len)

参数定义:

hwnd 整形数: 指定搜索的窗口句柄或者进程ID.  默认是窗口句柄. 如果要指定为进程ID,需要调用SetMemoryHwndAsProcessId.

addr 字符串: 用字符串来描述地址,类似于CE的地址描述,数值必须是16进制,里面可以用[ ] + -这些符号来描述一个地址。+表示地址加,-表示地址减
       模块名必须用<>符号来圈起来

      例如:

1.         "4DA678" 最简单的方式,用绝对数值来表示地址

2.         "<360SE.exe>+DA678" 相对简单的方式,只是这里用模块名来决定模块基址,后面的是偏移

3.         "[4DA678]+3A" 用绝对数值加偏移,相当于一级指针

4.         "[<360SE.exe>+DA678]+3A" 用模块定基址的方式,也是一级指针

5.         "[[[<360SE.exe>+DA678]+3A]+5B]+8" 这个是一个三级指针

总之熟悉CE的人 应该对这个地址描述都很熟悉,我就不多举例了

type 整形数: 字符串类型,取值如下

      0 : GBK字符串

      1 : Unicode字符串

len 整形数: 需要读取的字节数目.

返回值:

字符串:
读取到的字符串,注意这里无法判断读取是否成功

示例:

value = dm.ReadString(hwnd,"4DA678",0,10)
MessageBox  value



注: 如果目标窗口的绑定属性中有dx.public.memory,并且是用本对象来绑定的,那么操作方式是直接进入目标进程读写.
dx.public.memory可突破部分窗口读写保护. 如果正常方式无法读写,可以尝试此属性。
SetMemoryHwndAsProcessId
函数简介:

设置是否把所有内存接口函数中的窗口句柄当作进程ID,以支持直接以进程ID来使用内存接口. <收费功能,具体详情点击查看>

函数原型:

long SetMemoryHwndAsProcessId(en)

参数定义:

en 整形数: 取值如下
             0 : 关闭  1 : 开启

返回值:

整形数:
0 : 失败
1 : 成功

示例:

dm.SetMemoryHwndAsProcessId 1

注: 默认是当作窗口句柄.



注意,开启这个功能以后,dx.public.memory就会无效.

WriteData(
函数简介:

对指定地址写入二进制数据

函数原型:

long WriteData(hwnd,addr,data)

参数定义:

hwnd 整形数: 指定搜索的窗口句柄或者进程ID.  默认是窗口句柄. 如果要指定为进程ID,需要调用SetMemoryHwndAsProcessId.

addr 字符串: 用字符串来描述地址,类似于CE的地址描述,数值必须是16进制,里面可以用[ ] + -这些符号来描述一个地址。+表示地址加,-表示地址减
       模块名必须用<>符号来圈起来

      例如:

1.         "4DA678" 最简单的方式,用绝对数值来表示地址

2.         "<360SE.exe>+DA678" 相对简单的方式,只是这里用模块名来决定模块基址,后面的是偏移

3.         "[4DA678]+3A" 用绝对数值加偏移,相当于一级指针

4.         "[<360SE.exe>+DA678]+3A" 用模块定基址的方式,也是一级指针

5.         "[[[<360SE.exe>+DA678]+3A]+5B]+8" 这个是一个三级指针

总之熟悉CE的人 应该对这个地址描述都很熟悉,我就不多举例了

data 字符串: 二进制数据,以字符串形式描述,比如"12 34 56 78 90 ab cd"

返回值:

整形数:
0 : 失败

1 : 成功

示例:

dm_ret = dm.WriteData(hwnd,"4DA678","12 34 56 78 90 ab cd")


注: 如果目标窗口的绑定属性中有dx.public.memory,并且是用本对象来绑定的,那么操作方式是直接进入目标进程读写.
dx.public.memory可突破部分窗口读写保护. 如果正常方式无法读写,可以尝试此属性。

注: 简单游平台不支持此接口

WriteDouble
函数简介:

对指定地址写入双精度浮点数

函数原型:

long WriteDouble(hwnd,addr,v)

参数定义:

hwnd 整形数: 指定搜索的窗口句柄或者进程ID.  默认是窗口句柄. 如果要指定为进程ID,需要调用SetMemoryHwndAsProcessId.

addr 字符串: 用字符串来描述地址,类似于CE的地址描述,数值必须是16进制,里面可以用[ ] + -这些符号来描述一个地址。+表示地址加,-表示地址减
       模块名必须用<>符号来圈起来

      例如:

1.         "4DA678" 最简单的方式,用绝对数值来表示地址

2.         "<360SE.exe>+DA678" 相对简单的方式,只是这里用模块名来决定模块基址,后面的是偏移

3.         "[4DA678]+3A" 用绝对数值加偏移,相当于一级指针

4.         "[<360SE.exe>+DA678]+3A" 用模块定基址的方式,也是一级指针

5.         "[[[<360SE.exe>+DA678]+3A]+5B]+8" 这个是一个三级指针

总之熟悉CE的人 应该对这个地址描述都很熟悉,我就不多举例了

v 双精度浮点数: 双精度浮点数

返回值:

整形数:
0 : 失败

1 : 成功

示例:

dm_ret = dm.WriteDouble(hwnd,"4DA678",2.34)

注: 如果目标窗口的绑定属性中有dx.public.memory,并且是用本对象来绑定的,那么操作方式是直接进入目标进程读写.
dx.public.memory可突破部分窗口读写保护. 如果正常方式无法读写,可以尝试此属性。

注: 简单游平台不支持此接口
WriteFloat

函数简介:

对指定地址写入单精度浮点数

函数原型:

long WriteFloat(hwnd,addr,v)

参数定义:

hwnd 整形数: 指定搜索的窗口句柄或者进程ID.  默认是窗口句柄. 如果要指定为进程ID,需要调用SetMemoryHwndAsProcessId.

addr 字符串: 用字符串来描述地址,类似于CE的地址描述,数值必须是16进制,里面可以用[ ] + -这些符号来描述一个地址。+表示地址加,-表示地址减
       模块名必须用<>符号来圈起来

      例如:

1.         "4DA678" 最简单的方式,用绝对数值来表示地址

2.         "<360SE.exe>+DA678" 相对简单的方式,只是这里用模块名来决定模块基址,后面的是偏移

3.         "[4DA678]+3A" 用绝对数值加偏移,相当于一级指针

4.         "[<360SE.exe>+DA678]+3A" 用模块定基址的方式,也是一级指针

5.         "[[[<360SE.exe>+DA678]+3A]+5B]+8" 这个是一个三级指针

总之熟悉CE的人 应该对这个地址描述都很熟悉,我就不多举例了

v 单精度浮点数: 单精度浮点数

返回值:

整形数:
0 : 失败

1 : 成功

示例:

dm_ret = dm.WriteFloat(hwnd,"4DA678",2.34)

注: 如果目标窗口的绑定属性中有dx.public.memory,并且是用本对象来绑定的,那么操作方式是直接进入目标进程读写.
dx.public.memory可突破部分窗口读写保护. 如果正常方式无法读写,可以尝试此属性。

注: 简单游平台不支持此接口

WriteInt
函数简介:

对指定地址写入整数数值,类型可以是8位,16位 或者 32位

函数原型:

long WriteInt(hwnd,addr,type,v)

参数定义:

hwnd 整形数: 指定搜索的窗口句柄或者进程ID.  默认是窗口句柄. 如果要指定为进程ID,需要调用SetMemoryHwndAsProcessId.

addr 字符串: 用字符串来描述地址,类似于CE的地址描述,数值必须是16进制,里面可以用[ ] + -这些符号来描述一个地址。+表示地址加,-表示地址减
       模块名必须用<>符号来圈起来

      例如:

1.         "4DA678" 最简单的方式,用绝对数值来表示地址

2.         "<360SE.exe>+DA678" 相对简单的方式,只是这里用模块名来决定模块基址,后面的是偏移

3.         "[4DA678]+3A" 用绝对数值加偏移,相当于一级指针

4.         "[<360SE.exe>+DA678]+3A" 用模块定基址的方式,也是一级指针

5.         "[[[<360SE.exe>+DA678]+3A]+5B]+8" 这个是一个三级指针

总之熟悉CE的人 应该对这个地址描述都很熟悉,我就不多举例了

type 整形数: 整数类型,取值如下

      0 : 32位

      1 : 16 位

      2 : 8位

v 整形数: 整形数值

返回值:

整形数:
0 : 失败

1 : 成功

示例:

dm_ret = dm.WriteInt(hwnd,"4DA678",0,100)

注: 如果目标窗口的绑定属性中有dx.public.memory,并且是用本对象来绑定的,那么操作方式是直接进入目标进程读写.
dx.public.memory可突破部分窗口读写保护. 如果正常方式无法读写,可以尝试此属性。



注: 简单游平台不支持此接口

WriteString(
函数简介:

对指定地址写入字符串,可以是Ascii字符串或者是Unicode字符串

函数原型:

long WriteString(hwnd,addr,type,v)

参数定义:

hwnd 整形数: 指定搜索的窗口句柄或者进程ID.  默认是窗口句柄. 如果要指定为进程ID,需要调用SetMemoryHwndAsProcessId.

addr 字符串: 用字符串来描述地址,类似于CE的地址描述,数值必须是16进制,里面可以用[ ] + -这些符号来描述一个地址。+表示地址加,-表示地址减
       模块名必须用<>符号来圈起来

      例如:

1.         "4DA678" 最简单的方式,用绝对数值来表示地址

2.         "<360SE.exe>+DA678" 相对简单的方式,只是这里用模块名来决定模块基址,后面的是偏移

3.         "[4DA678]+3A" 用绝对数值加偏移,相当于一级指针

4.         "[<360SE.exe>+DA678]+3A" 用模块定基址的方式,也是一级指针

5.         "[[[<360SE.exe>+DA678]+3A]+5B]+8" 这个是一个三级指针

总之熟悉CE的人 应该对这个地址描述都很熟悉,我就不多举例了

type 整形数: 字符串类型,取值如下

      0 : Ascii字符串

      1 : Unicode字符串

v 字符串: 字符串

返回值:

整形数:
0: 失败

1: 成功

示例:

dm_ret = dm.WriteString(hwnd,"4DA678",0,"我是来测试的")

注: 如果目标窗口的绑定属性中有dx.public.memory,并且是用本对象来绑定的,那么操作方式是直接进入目标进程读写.
dx.public.memory可突破部分窗口读写保护. 如果正常方式无法读写,可以尝试此属性。

注: 简单游平台不支持此接口
算法

ExcludePos
函数简介:

根据部分Ex接口的返回值,排除指定范围区域内的坐标.

函数原型:

string ExcludePos(all_pos,type,x1,y1,x2,y2)

参数定义:

all_pos 字符串: 坐标描述串。  一般是FindStrEx,FindStrFastEx,FindStrWithFontEx, FindColorEx, FindMultiColorEx,和FindPicEx的返回值.
type 整形数:  取值为0或者1

     如果all_pos的内容是由FindPicEx,FindStrEx,FindStrFastEx,FindStrWithFontEx返回,那么取值为0

     如果all_pos的内容是由FindColorEx, FindMultiColorEx返回,那么取值为1

x1 整形数: 左上角横坐标
y1 整形数: 左上角纵坐标
x2 整形数: 右下角横坐标
y2 整形数: 右下角纵坐标

返回值:

字符串:
经过筛选以后的返回值,格式和type指定的一致.

示例:

ret = dm.FindColorEx(0,0,2000,2000,"aaaaaa-000000",1.0,0)
ret = dm.ExcludePos(ret,1,100,100,300,400)
TracePrint ret



ret = dm.FindPicEx(0,0,2000,2000,"a.bmp","000000",1.0,0)
ret = dm.ExcludePos(ret,0,100,100,300,400)
TracePrint ret
FindNearestPos(
函数简介:

根据部分Ex接口的返回值,然后在所有坐标里找出距离指定坐标最近的那个坐标.

函数原型:

string FindNearestPos(all_pos,type,x,y)

参数定义:

all_pos 字符串: 坐标描述串。  一般是FindStrEx,FindStrFastEx,FindStrWithFontEx, FindColorEx, FindMultiColorEx,和FindPicEx的返回值.
type 整形数:  取值为0或者1

     如果all_pos的内容是由FindPicEx,FindStrEx,FindStrFastEx,FindStrWithFontEx返回,那么取值为0

     如果all_pos的内容是由FindColorEx, FindMultiColorEx返回,那么取值为1

x 整形数: 横坐标
y 整形数: 纵坐标

返回值:

字符串:
返回的格式和type有关,如果type为0,那么返回的格式是"id,x,y"

如果type为1,那么返回的格式是"x,y".

示例:

ret = dm.FindColorEx(0,0,2000,2000,"aaaaaa-000000",1.0,0)
ret = dm.FindNearestPos(ret,1,100,100)
TracePrint ret



ret = dm.FindPicEx(0,0,2000,2000,"a.bmp","000000",1.0,0)
ret = dm.FindNearestPos(ret,0,100,100)
TracePrint ret
SortPosDistance(


函数简介:

根据部分Ex接口的返回值,然后对所有坐标根据对指定坐标的距离进行从小到大的排序.

函数原型:

string SortPosDistance(all_pos,type,x,y)

参数定义:

all_pos 字符串: 坐标描述串。  一般是FindStrEx,FindStrFastEx,FindStrWithFontEx, FindColorEx, FindMultiColorEx,和FindPicEx的返回值.
type 整形数:  取值为0或者1

     如果all_pos的内容是由FindPicEx,FindStrEx,FindStrFastEx,FindStrWithFontEx返回,那么取值为0

     如果all_pos的内容是由FindColorEx, FindMultiColorEx返回,那么取值为1

x 整形数: 横坐标
y 整形数: 纵坐标

返回值:

字符串:
返回的格式和type指定的格式一致.

示例:

ret = dm.FindColorEx(0,0,2000,2000,"aaaaaa-000000",1.0,0)
ret = dm.SortPosDistance(ret,1,100,100)
TracePrint ret



ret = dm.FindPicEx(0,0,2000,2000,"a.bmp","000000",1.0,0)
ret = dm.SortPosDistance(ret,0,100,100)
TracePrint ret


图色
AppendPicAddr

函数简介:

对指定的数据地址和长度,组合成新的参数. FindPicMem FindPicMemE 以及FindPicMemEx专用

函数原型:

string AppendPicAddr(pic_info,addr,size)

参数定义:

pic_info 字符串: 老的地址描述串

addr 整形数: 数据地址

size 整形数: 数据长度

返回值:

字符串:
新的地址描述串

示例:

pic_info = ""
pic_info = dm.AppendPicAddr(pic_info,12034,643)
pic_info = dm.AppendPicAddr(pic_info,328435,8935)
pic_info = dm.AppendPicAddr(pic_info,809234,789) 
BGR2RGB
函数简介:

把BGR(按键格式)的颜色格式转换为RGB

函数原型:

string BGR2RGB(bgr_color)

参数定义:

bgr_color 字符串:bgr格式的颜色字符串

返回值:

字符串:
RGB格式的字符串

示例:


rgb_color = dm.BGR2RGB(bgr_color)

Capture
函数简介:

抓取指定区域(x1, y1, x2, y2)的图像,保存为file(24位位图)

函数原型:

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

参数定义:

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

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

返回值:

整形数:
0:失败
1:成功

示例:

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

CaptureGif
函数简介:

抓取指定区域(x1, y1, x2, y2)的动画,保存为gif格式

函数原型:

long CaptureGif(x1, y1, x2, y2, file,delay,time)

参数定义:

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

     当然这里也可以指定全路径名.
delay 整形数: 动画间隔,单位毫秒。如果为0,表示只截取静态图片
time 整形数: 总共截取多久的动画,单位毫秒。

返回值:

整形数:
0:失败
1:成功

示例:

// 截取动画
dm_ret = dm.CaptureGif(0,0,2000,2000,"screen.gif",100,3000)

// 截取静态
dm_ret = dm.CaptureGif(0,0,2000,2000,"screen.gif",0,0)

CaptureJpg
函数简介:

抓取指定区域(x1, y1, x2, y2)的图像,保存为file(JPG压缩格式)

函数原型:

long CaptureJpg(x1, y1, x2, y2, file, quality)

参数定义:

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

     当然这里也可以指定全路径名.
quality 整形数: jpg压缩比率(1-100) 越大图片质量越好

返回值:

整形数:
0:失败
1:成功

示例:

dm_ret = dm.CaptureJpg(0,0,2000,2000,"screen.bmp",50)

CapturePng
函数简介:

同Capture函数,只是保存的格式为PNG.

函数原型:

long CapturePng(x1,y1,x2,y2,file)

参数定义:

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

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



返回值:

整形数:
0 : 失败

1 : 成功

示例:


dm_ret = dm.CapturePng(0,0,2000,2000,"screen.png")

CapturePre
函数简介:

抓取上次操作的图色区域,保存为file(24位位图)

函数原型:

long CapturePre(file)

参数定义:

file 字符串:保存的文件名,保存的地方一般为SetPath中设置的目录

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

返回值:

整形数:
0:失败
1:成功

示例:

dm_ret = dm.CapturePre("screen.bmp")

注意,要开启此函数,必须先调用EnableDisplayDebug
任何图色或者文字识别函数,都可以通过这个来截取. 具体可以查看常见问题中"本机文字识别正常,别的机器为何不正常"这一节.


CmpColor
函数简介:

比较指定坐标点(x,y)的颜色

函数原型:

long CmpColor(x,y,color,sim)

参数定义:

x 整形数: X坐标

y 整形数: Y坐标

color 字符串: 颜色字符串,可以支持偏色,多色,例如 "ffffff-202020|000000-000000" 这个表示白色偏色为202020,和黑色偏色为000000

       颜色最多支持10种颜色组合

sim 双精度浮点数: 相似度(0.1-1.0)



返回值:

整形数:
0: 颜色匹配
1: 颜色不匹配

示例:

dm_ret = dm.CmpColor(200,300,"000000-000000|ff00ff-101010",0.9)
If dm_ret = 0 Then
    MessageBox "相等" 
End If 

EnableDisplayDebug
函数简介:

开启图色调试模式,此模式会稍许降低图色和文字识别的速度.默认不开启.

函数原型:

long EnableDisplayDebug(enable_debug)

参数定义:

enable_debug 整形数: 0 为关闭

               1 为开启

返回值:

整形数:
0:失败
1:成功

示例:

dm.EnableDisplayDebug 1
dm_ret = dm.CapturePre("screen.bmp")
EnableGetColorByCapture(

函数简介:

允许调用GetColor GetColorBGR GetColorHSV 以及 CmpColor时,以截图的方式来获取颜色。

函数原型:

long EnableGetColorByCapture(enable)

参数定义:

enable 整形数: 0 关闭

         1 打开

返回值:

整形数:
0 : 失败
1 : 成功

示例:


dm.EnableGetColorByCapture 1
TracePrint dm.GetColor(300,300)



注 : 某些窗口上,可能GetColor会获取不到颜色,可以尝试此接口.
FindColor
函数简介:

查找指定区域内的颜色,颜色格式"RRGGBB-DRDGDB",注意,和按键的颜色格式相反

函数原型:

long FindColor(x1, y1, x2, y2, color, sim, dir,intX,intY)

参数定义:

x1 整形数:区域的左上X坐标
y1 整形数:区域的左上Y坐标
x2 整形数:区域的右下X坐标
y2 整形数:区域的右下Y坐标
color 字符串:颜色 格式为"RRGGBB-DRDGDB",比如"123456-000000|aabbcc-202020"
sim 双精度浮点数:相似度,取值范围0.1-1.0
dir 整形数:查找方向 0: 从左到右,从上到下 
             1: 从左到右,从下到上 
             2: 从右到左,从上到下 
             3: 从右到左,从下到上 
             4:从中心往外查找
             5: 从上到下,从左到右 
             6: 从上到下,从右到左
             7: 从下到上,从左到右
             8: 从下到上,从右到左
intX 变参指针:返回X坐标
intY 变参指针:返回Y坐标

返回值: 

整形数:
0:没找到
1:找到

示例:


dm_ret = dm.FindColor(0,0,2000,2000,"123456-000000|aabbcc-030303|ddeeff-202020",1.0,0,intX,intY)
If intX >= 0 and intY >= 0 Then
    MessageBox "找到"
End If
FindColorE
函数简介:

查找指定区域内的颜色,颜色格式"RRGGBB-DRDGDB",注意,和按键的颜色格式相反

易语言用不了FindColor可以用此接口来代替

函数原型:

string FindColorE(x1, y1, x2, y2, color, sim, dir)

参数定义:

x1 整形数:区域的左上X坐标
y1 整形数:区域的左上Y坐标
x2 整形数:区域的右下X坐标
y2 整形数:区域的右下Y坐标
color 字符串:颜色 格式为"RRGGBB-DRDGDB",比如"123456-000000|aabbcc-202020"
sim 双精度浮点数:相似度,取值范围0.1-1.0
dir 整形数:查找方向 0: 从左到右,从上到下 
             1: 从左到右,从下到上 
             2: 从右到左,从上到下 
             3: 从右到左,从下到上 
             4:从中心往外查找
             5: 从上到下,从左到右 
             6: 从上到下,从右到左
             7: 从下到上,从左到右
             8: 从下到上,从右到左




返回值: 

字符串:
返回X和Y坐标 形式如"x|y", 比如"100|200"

示例:


pos = dm.FindColorE(0,0,2000,2000,"123456-000000|aabbcc-030303|ddeeff-202020",1.0,0)
pos = split(pos,"|")
If int(pos(0)) > 0 Then
    MessageBox "找到"
End If
FindColorEx
函数简介:

查找指定区域内的所有颜色,颜色格式"RRGGBB-DRDGDB",注意,和按键的颜色格式相反

函数原型:

string FindColorEx(x1, y1, x2, y2, color, sim, dir)

参数定义:

x1 整形数:区域的左上X坐标
y1 整形数:区域的左上Y坐标
x2 整形数:区域的右下X坐标
y2 整形数:区域的右下Y坐标
color 字符串:颜色 格式为"RRGGBB-DRDGDB" 比如"aabbcc-000000|123456-202020"
sim 双精度浮点数:相似度,取值范围0.1-1.0
dir 整形数:查找方向 0: 从左到右,从上到下 
             1: 从左到右,从下到上 
             2: 从右到左,从上到下 
             3: 从右到左,从下到上 
             5: 从上到下,从左到右 
             6: 从上到下,从右到左
             7: 从下到上,从左到右
             8: 从下到上,从右到左



返回值: 

字符串:
返回所有颜色信息的坐标值,然后通过GetResultCount等接口来解析 (由于内存限制,返回的颜色数量最多为1800个左右)

示例:


s = dm.FindColorEx(0,0,2000,2000,"123456-000000|abcdef-202020",1.0,0)
count = dm.GetResultCount(s)
index = 0
Do While index < count
    dm_ret = dm.GetResultPos(s,index,intX,intY)
    MessageBox intX&","&intY 
    index = index + 1 
Loop 

FindMultiColor
函数简介:

根据指定的多点查找颜色坐标

函数原型:

long FindMultiColor(x1, y1, x2, y2,first_color,offset_color,sim, dir,intX,intY)

参数定义:

x1 整形数:区域的左上X坐标
y1 整形数:区域的左上Y坐标
x2 整形数:区域的右下X坐标
y2 整形数:区域的右下Y坐标
first_color 字符串:颜色格式为"RRGGBB-DRDGDB",比如"123456-000000"

这里的含义和按键自带Color插件的意义相同,只不过我的可以支持偏色

所有的偏移色坐标都相对于此颜色
offset_color 字符串: 偏移颜色可以支持任意多个点 格式和按键自带的Color插件意义相同

格式为"x1|y1|RRGGBB-DRDGDB,……xn|yn|RRGGBB-DRDGDB"

比如"1|3|aabbcc,-5|-3|123456-000000"等任意组合都可以,支持偏色

还可以支持反色模式,比如"1|3|-aabbcc,-5|-3|-123456-000000","-"表示除了指定颜色之外的颜色.


sim 双精度浮点数:相似度,取值范围0.1-1.0
dir 整形数:查找方向 0: 从左到右,从上到下 1: 从左到右,从下到上 2: 从右到左,从上到下 3: 从右到左, 从下到上
intX 变参指针:返回X坐标(坐标为first_color所在坐标)
intY 变参指针:返回Y坐标(坐标为first_color所在坐标)

返回值: 

整形数:
0:没找到
1:找到

示例:


dm_ret = dm.FindMultiColor(0,0,2000,2000,"cc805b-020202","9|2|-00ff00,15|2|2dff1c-010101,6|11|a0d962,11|14|-ffffff",1.0,1,intX,intY)
dm.MoveTo intX,intY
FindMultiColorE
函数简介:

根据指定的多点查找颜色坐标

易语言用不了FindMultiColor可以用此接口来代替

函数原型:

string FindMultiColorE(x1, y1, x2, y2,first_color,offset_color,sim, dir)

参数定义:

x1 整形数:区域的左上X坐标
y1 整形数:区域的左上Y坐标
x2 整形数:区域的右下X坐标
y2 整形数:区域的右下Y坐标
first_color 字符串:颜色格式为"RRGGBB-DRDGDB",比如"123456-000000"

这里的含义和按键自带Color插件的意义相同,只不过我的可以支持偏色

所有的偏移色坐标都相对于此颜色
offset_color 字符串: 偏移颜色可以支持任意多个点 格式和按键自带的Color插件意义相同

格式为"x1|y1|RRGGBB-DRDGDB,……xn|yn|RRGGBB-DRDGDB"

比如"1|3|aabbcc,-5|-3|123456-000000"等任意组合都可以,支持偏色

还可以支持反色模式,比如"1|3|-aabbcc,-5|-3|-123456-000000","-"表示除了指定颜色之外的颜色.


sim 双精度浮点数:相似度,取值范围0.1-1.0
dir 整形数:查找方向 0: 从左到右,从上到下 1: 从左到右,从下到上 2: 从右到左,从上到下 3: 从右到左, 从下到上



返回值: 

字符串:
返回X和Y坐标 形式如"x|y", 比如"100|200"

示例:


pos = dm.FindMultiColorE(0,0,2000,2000,"cc805b-020202","9|2|-00ff00,15|2|-2dff1c-010101,6|11|a0d962,11|14|-ffffff",1.0,1)
pos = split(pos,"|")
dm.MoveTo int(pos(0)),int(pos(1))
FindMultiColorEx
函数简介:

根据指定的多点查找所有颜色坐标

函数原型:

string FindMultiColorEx(x1, y1, x2, y2,first_color,offset_color,sim, dir)

参数定义:

x1 整形数:区域的左上X坐标
y1 整形数:区域的左上Y坐标
x2 整形数:区域的右下X坐标
y2 整形数:区域的右下Y坐标
first_color 字符串:颜色格式为"RRGGBB-DRDGDB",比如"123456-000000"

这里的含义和按键自带Color插件的意义相同,只不过我的可以支持偏色

所有的偏移色坐标都相对于此颜色
offset_color 字符串: 偏移颜色可以支持任意多个点 格式和按键自带的Color插件意义相同

格式为"x1|y1|RRGGBB-DRDGDB,……xn|yn|RRGGBB-DRDGDB"

比如"1|3|aabbcc,-5|-3|123456-000000"等任意组合都可以,支持偏色

还可以支持反色模式,比如"1|3|-aabbcc,-5|-3|-123456-000000","-"表示除了指定颜色之外的颜色


sim 双精度浮点数:相似度,取值范围0.1-1.0
dir 整形数:查找方向 0: 从左到右,从上到下 1: 从左到右,从下到上 2: 从右到左,从上到下 3: 从右到左, 从下到上



返回值: 

字符串:
返回所有颜色信息的坐标值,然后通过GetResultCount等接口来解析(由于内存限制,返回的坐标数量最多为1800个左右)

坐标是first_color所在的坐标

示例:


dm_ret = dm.FindMultiColorEx(0,0,2000,2000,"cc805b-020202","9|2|-00ff00,15|2|2dff1c-010101,6|11|a0d962,11|14|-ffffff",1.0,1)
count = dm.GetResultCount(dm_ret)
index = 0
Do While index < count 
   aa = dm.GetResultPos(dm_ret,index,intX,intY)
   dm.MoveTo intX,intY
   index = index + 1
   Delay  1000
Loop
FindPic
函数简介:

查找指定区域内的图片,位图必须是24位色格式,支持透明色,当图像上下左右4个顶点的颜色一样时,则这个颜色将作为透明色处理.

这个函数可以查找多个图片,只返回第一个找到的X Y坐标.

函数原型:

long FindPic(x1, y1, x2, y2, pic_name, delta_color,sim, dir,intX, intY)

参数定义:

x1 整形数:区域的左上X坐标
y1 整形数:区域的左上Y坐标
x2 整形数:区域的右下X坐标
y2 整形数:区域的右下Y坐标
pic_name 字符串:图片名,可以是多个图片,比如"test.bmp|test2.bmp|test3.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

示例:


dm_ret = dm.FindPic(0,0,2000,2000,"1.bmp|2.bmp|3.bmp","000000",0.9,0,intX,intY)
If intX >= 0 and intY >= 0 Then
    MessageBox "找到"
End If
FindPicE
函数简介:

查找指定区域内的图片,位图必须是24位色格式,支持透明色,当图像上下左右4个顶点的颜色一样时,则这个颜色将作为透明色处理.

这个函数可以查找多个图片,只返回第一个找到的X Y坐标.

易语言用不了FindPic可以用此接口来代替

函数原型:

string FindPicE(x1, y1, x2, y2, pic_name, delta_color,sim, dir)

参数定义:

x1 整形数:区域的左上X坐标
y1 整形数:区域的左上Y坐标
x2 整形数:区域的右下X坐标
y2 整形数:区域的右下Y坐标
pic_name 字符串:图片名,可以是多个图片,比如"test.bmp|test2.bmp|test3.bmp"
delta_color 字符串:颜色色偏比如"203040" 表示RGB的色偏分别是20 30 40 (这里是16进制表示)
sim 双精度浮点数:相似度,取值范围0.1-1.0
dir 整形数:查找方向 0: 从左到右,从上到下 1: 从左到右,从下到上 2: 从右到左,从上到下 3: 从右到左, 从下到上

返回值:

字符串:
返回找到的图片序号(从0开始索引)以及X和Y坐标 形式如"index|x|y", 比如"3|100|200"

示例:


pos = dm.FindPicE(0,0,2000,2000,"1.bmp|2.bmp|3.bmp","000000",0.9,0)
pos = split(pos,"|")
If int(pos(1)) > 0 Then
    MessageBox "找到"
End If
FindPicEx
函数简介:

查找指定区域内的图片,位图必须是24位色格式,支持透明色,当图像上下左右4个顶点的颜色一样时,则这个颜色将作为透明色处理.

这个函数可以查找多个图片,并且返回所有找到的图像的坐标.

函数原型:

string FindPicEx(x1, y1, x2, y2, pic_name, delta_color,sim, dir)

参数定义:

x1 整形数:区域的左上X坐标
y1 整形数:区域的左上Y坐标
x2 整形数:区域的右下X坐标
y2 整形数:区域的右下Y坐标
pic_name 字符串:图片名,可以是多个图片,比如"test.bmp|test2.bmp|test3.bmp"
delta_color 字符串:颜色色偏比如"203040" 表示RGB的色偏分别是20 30 40 (这里是16进制表示)
sim 双精度浮点数:相似度,取值范围0.1-1.0
dir 整形数:查找方向 0: 从左到右,从上到下 1: 从左到右,从下到上 2: 从右到左,从上到下 3: 从右到左, 从下到上

返回值:

字符串:
返回的是所有找到的坐标格式如下:"id,x,y|id,x,y..|id,x,y" (图片左上角的坐标)

比如"0,100,20|2,30,40" 表示找到了两个,第一个,对应的图片是图像序号为0的图片,坐标是(100,20),第二个是序号为2的图片,坐标(30,40)
(由于内存限制,返回的图片数量最多为1500个左右)

示例:


dm_ret = dm.FindPicEx(0,0,2000,2000,"test.bmp|test2.bmp|test3.bmp|test4.bmp|test5.bmp","020202",1.0,0)
If len(dm_ret) > 0 Then
   ss = split(dm_ret,"|")
   index = 0
   count = UBound(ss) + 1
   Do While index < count
      TracePrint ss(index)
      sss = split(ss(index),",")
      id = int(sss(0))
      x = int(sss(1))
      y = int(sss(2))
      dm.MoveTo x,y
      Delay 1000
      index = index+1
   Loop
End If
FindPicExS(
函数简介:

查找指定区域内的图片,位图必须是24位色格式,支持透明色,当图像上下左右4个顶点的颜色一样时,则这个颜色将作为透明色处理.

这个函数可以查找多个图片,并且返回所有找到的图像的坐标. 此函数同FindPicEx.只是返回值不同. <收费功能,具体详情点击查看>

函数原型:

string FindPicExS(x1, y1, x2, y2, pic_name, delta_color,sim, dir)

参数定义:

x1 整形数:区域的左上X坐标
y1 整形数:区域的左上Y坐标
x2 整形数:区域的右下X坐标
y2 整形数:区域的右下Y坐标
pic_name 字符串:图片名,可以是多个图片,比如"test.bmp|test2.bmp|test3.bmp"
delta_color 字符串:颜色色偏比如"203040" 表示RGB的色偏分别是20 30 40 (这里是16进制表示)
sim 双精度浮点数:相似度,取值范围0.1-1.0
dir 整形数:查找方向 0: 从左到右,从上到下 1: 从左到右,从下到上 2: 从右到左,从上到下 3: 从右到左, 从下到上

返回值:

字符串:
返回的是所有找到的坐标格式如下:"file,x,y| file,x,y..| file,x,y" (图片左上角的坐标)

比如"1.bmp,100,20|2.bmp,30,40" 表示找到了两个,第一个,对应的图片是1.bmp,坐标是(100,20),第二个是2.bmp,坐标(30,40)
(由于内存限制,返回的图片数量最多为1500个左右)

示例:


dm_ret = dm.FindPicExS(0,0,2000,2000,"test.bmp|test2.bmp|test3.bmp|test4.bmp|test5.bmp","020202",1.0,0)
If len(dm_ret) > 0 Then
   ss = split(dm_ret,"|")
   index = 0
   count = UBound(ss) + 1
   Do While index < count
      TracePrint ss(index)
      sss = split(ss(index),",")
      file = sss(0)
      x = int(sss(1))
      y = int(sss(2))
      dm.MoveTo x,y
      Delay 1000
      index = index+1
   Loop
End If
FindPicMem(
函数简介:

查找指定区域内的图片,位图必须是24位色格式,支持透明色,当图像上下左右4个顶点的颜色一样时,则这个颜色将作为透明色处理.

这个函数可以查找多个图片,只返回第一个找到的X Y坐标. 这个函数要求图片是数据地址.   <收费功能,具体详情点击查看>

函数原型:

long FindPicMem(x1, y1, x2, y2, pic_info, delta_color,sim, dir,intX, intY)

参数定义:

x1 整形数:区域的左上X坐标
y1 整形数:区域的左上Y坐标
x2 整形数:区域的右下X坐标
y2 整形数:区域的右下Y坐标
pic_info 字符串: 图片数据地址集合. 格式为"地址1,长度1|地址2,长度2.....|地址n,长度n". 可以用AppendPicAddr来组合. 
          地址表示24位位图资源在内存中的首地址,用十进制的数值表示
          长度表示位图资源在内存中的长度,用十进制数值表示.
delta_color 字符串:颜色色偏比如"203040" 表示RGB的色偏分别是20 30 40 (这里是16进制表示)
sim 双精度浮点数:相似度,取值范围0.1-1.0
dir 整形数:查找方向 0: 从左到右,从上到下 1: 从左到右,从下到上 2: 从右到左,从上到下 3: 从右到左, 从下到上
intX 变参指针:返回图片左上角的X坐标
intY 变参指针:返回图片左上角的Y坐标

返回值:

整形数:
返回找到的图片的序号,从0开始索引.如果没找到返回-1

示例:

pic_info = ""
pic_info = dm.AppendPicAddr(pic_info,12034,643)
pic_info = dm.AppendPicAddr(pic_info,328435,8935)
pic_info = dm.AppendPicAddr(pic_info,809234,789)
dm_ret = dm.FindPicMem(0,0,2000,2000, pic_info,"000000",0.9,0,intX,intY)
If intX >= 0 and intY >= 0 Then
    MessageBox "找到"
End If

注 : 内存中的图片格式必须是24位色,并且不能加密.
FindPicMemE
函数简介:

查找指定区域内的图片,位图必须是24位色格式,支持透明色,当图像上下左右4个顶点的颜色一样时,则这个颜色将作为透明色处理.

这个函数可以查找多个图片,只返回第一个找到的X Y坐标. 这个函数要求图片是数据地址.   <收费功能,具体详情点击查看>

易语言用不了FindPicMem可以用此接口来代替

函数原型:

string FindPicMemE(x1, y1, x2, y2, pic_info, delta_color,sim, dir)

参数定义:

x1 整形数:区域的左上X坐标
y1 整形数:区域的左上Y坐标
x2 整形数:区域的右下X坐标
y2 整形数:区域的右下Y坐标
pic_info 字符串: 图片数据地址集合. 格式为"地址1,长度1|地址2,长度2.....|地址n,长度n". 可以用AppendPicAddr来组合. 
          地址表示24位位图资源在内存中的首地址,用十进制的数值表示
          长度表示位图资源在内存中的长度,用十进制数值表示.
delta_color 字符串:颜色色偏比如"203040" 表示RGB的色偏分别是20 30 40 (这里是16进制表示)
sim 双精度浮点数:相似度,取值范围0.1-1.0
dir 整形数:查找方向 0: 从左到右,从上到下 1: 从左到右,从下到上 2: 从右到左,从上到下 3: 从右到左, 从下到上

返回值:

字符串:
返回找到的图片序号(从0开始索引)以及X和Y坐标 形式如"index|x|y", 比如"3|100|200"

示例:

pic_info = ""
pic_info = dm.AppendPicAddr(pic_info,12034,643)
pic_info = dm.AppendPicAddr(pic_info,328435,8935)
pic_info = dm.AppendPicAddr(pic_info,809234,789)
pos = dm.FindPicE(0,0,2000,2000, pic_info,"000000",0.9,0)
pos = split(pos,"|")
If int(pos(1)) > 0 Then
    MessageBox "找到"
End If

注 : 内存中的图片格式必须是24位色,并且不能加密.

FindPicMemEx
函数简介:

查找指定区域内的图片,位图必须是24位色格式,支持透明色,当图像上下左右4个顶点的颜色一样时,则这个颜色将作为透明色处理.

这个函数可以查找多个图片,并且返回所有找到的图像的坐标. 这个函数要求图片是数据地址.   <收费功能,具体详情点击查看>

函数原型:

string FindPicMemEx(x1, y1, x2, y2, pic_info, delta_color,sim, dir)

参数定义:

x1 整形数:区域的左上X坐标
y1 整形数:区域的左上Y坐标
x2 整形数:区域的右下X坐标
y2 整形数:区域的右下Y坐标
pic_info 字符串: 图片数据地址集合. 格式为"地址1,长度1|地址2,长度2.....|地址n,长度n". 可以用AppendPicAddr来组合. 
          地址表示24位位图资源在内存中的首地址,用十进制的数值表示
          长度表示位图资源在内存中的长度,用十进制数值表示.
delta_color 字符串:颜色色偏比如"203040" 表示RGB的色偏分别是20 30 40 (这里是16进制表示)
sim 双精度浮点数:相似度,取值范围0.1-1.0
dir 整形数:查找方向 0: 从左到右,从上到下 1: 从左到右,从下到上 2: 从右到左,从上到下 3: 从右到左, 从下到上

返回值:

字符串:
返回的是所有找到的坐标格式如下:"id,x,y|id,x,y..|id,x,y" (图片左上角的坐标)

比如"0,100,20|2,30,40" 表示找到了两个,第一个,对应的图片是图像序号为0的图片,坐标是(100,20),第二个是序号为2的图片,坐标(30,40)
(由于内存限制,返回的图片数量最多为1500个左右)

示例:

pic_info = ""
pic_info = dm.AppendPicAddr(pic_info,12034,643)
pic_info = dm.AppendPicAddr(pic_info,328435,8935)
pic_info = dm.AppendPicAddr(pic_info,809234,789)
dm_ret = dm.FindPicMemEx(0,0,2000,2000, pic_info,"020202",1.0,0)
If len(dm_ret) > 0 Then
   ss = split(dm_ret,"|")
   index = 0
   count = UBound(ss) + 1
   Do While index < count
      TracePrint ss(index)
      sss = split(ss(index),",")
      id = int(sss(0))
      x = int(sss(1))
      y = int(sss(2))
      dm.MoveTo x,y
      Delay 1000
      index = index+1
   Loop
End If

注 : 内存中的图片格式必须是24位色,并且不能加密.


FindPicS
函数简介:

查找指定区域内的图片,位图必须是24位色格式,支持透明色,当图像上下左右4个顶点的颜色一样时,则这个颜色将作为透明色处理.

这个函数可以查找多个图片,只返回第一个找到的X Y坐标. 此函数同FindPic.只是返回值不同. <收费功能,具体详情点击查看>

函数原型:

string FindPicS(x1, y1, x2, y2, pic_name, delta_color,sim, dir,intX, intY)

参数定义:

x1 整形数:区域的左上X坐标
y1 整形数:区域的左上Y坐标
x2 整形数:区域的右下X坐标
y2 整形数:区域的右下Y坐标
pic_name 字符串:图片名,可以是多个图片,比如"test.bmp|test2.bmp|test3.bmp"
delta_color 字符串:颜色色偏比如"203040" 表示RGB的色偏分别是20 30 40 (这里是16进制表示)
sim 双精度浮点数:相似度,取值范围0.1-1.0
dir 整形数:查找方向 0: 从左到右,从上到下 1: 从左到右,从下到上 2: 从右到左,从上到下 3: 从右到左, 从下到上
intX 变参指针:返回图片左上角的X坐标
intY 变参指针:返回图片左上角的Y坐标

返回值:

字符串:
返回找到的图片的文件名. 没找到返回长度为0的字符串.

示例:


dm_ret = dm.FindPicS(0,0,2000,2000,"1.bmp|2.bmp|3.bmp","000000",0.9,0,intX,intY)
If intX >= 0 and intY >= 0 Then
    MessageBox "找到"&dm_ret
End If
FindShape
函数简介:

查找指定的形状. 形状的描述同按键的抓抓. 具体可以参考按键的抓抓. 
和按键的语法不同,需要用大漠综合工具的颜色转换. <收费功能,具体详情点击查看>

函数原型:

long FindShape(x1, y1, x2, y2, offset_color,sim, dir,intX,intY)

参数定义:

x1 整形数:区域的左上X坐标
y1 整形数:区域的左上Y坐标
x2 整形数:区域的右下X坐标
y2 整形数:区域的右下Y坐标
offset_color 字符串: 坐标偏移描述 可以支持任意多个点 格式和按键自带的Color插件意义相同

格式为"x1|y1|e1,……xn|yn|en"

比如"1|3|1,-5|-3|0"等任意组合都可以
sim 双精度浮点数:相似度,取值范围0.1-1.0
dir 整形数:查找方向 0: 从左到右,从上到下 1: 从左到右,从下到上 2: 从右到左,从上到下 3: 从右到左, 从下到上
intX 变参指针:返回X坐标(坐标为形状(0,0)所在坐标)
intY 变参指针:返回Y坐标(坐标为形状(0,0)所在坐标)

返回值: 

整形数:
0:没找到
1:找到

示例:


dm_ret = dm.FindShape(0,0,2000,2000, "1|1|0,1|6|1,0|10|1,9|10|1,7|6|1,7|8|0,8|9|0,2|2|1,3|1|1",1.0,0,x,y)
dm.MoveTo x,y

FindShapeE
函数简介:

查找指定的形状. 形状的描述同按键的抓抓. 具体可以参考按键的抓抓. 
和按键的语法不同,需要用大漠综合工具的颜色转换. <收费功能,具体详情点击查看>

易语言用不了FindShape可以用此接口来代替

函数原型:

string FindShapeE(x1, y1, x2, y2, offset_color,sim, dir)

参数定义:

x1 整形数:区域的左上X坐标
y1 整形数:区域的左上Y坐标
x2 整形数:区域的右下X坐标
y2 整形数:区域的右下Y坐标
offset_color 字符串: 坐标偏移描述 可以支持任意多个点 格式和按键自带的Color插件意义相同

格式为"x1|y1|e1,……xn|yn|en"

比如"1|3|1,-5|-3|0"等任意组合都可以
sim 双精度浮点数:相似度,取值范围0.1-1.0
dir 整形数:查找方向 0: 从左到右,从上到下 1: 从左到右,从下到上 2: 从右到左,从上到下 3: 从右到左, 从下到上



返回值: 

字符串:
返回X和Y坐标 形式如"x|y", 比如"100|200"

示例:


pos = dm.FindShapeE(0,0,2000,2000,"1|1|0,1|6|1,0|10|1,9|10|1,7|6|1,7|8|0,8|9|0,2|2|1,3|1|1",1.0,0)
pos = split(pos,"|")
dm.MoveTo int(pos(0)),int(pos(1))
FindShapeEx
函数简介:

查找所有指定的形状的坐标. 形状的描述同按键的抓抓. 具体可以参考按键的抓抓. 
和按键的语法不同,需要用大漠综合工具的颜色转换. <收费功能,具体详情点击查看>

函数原型:

string FindShapeEx(x1, y1, x2, y2,offset_color,sim, dir)

参数定义:

x1 整形数:区域的左上X坐标
y1 整形数:区域的左上Y坐标
x2 整形数:区域的右下X坐标
y2 整形数:区域的右下Y坐标
offset_color 字符串: 坐标偏移描述可以支持任意多个点 格式和按键自带的Color插件意义相同

格式为"x1|y1|e1,……xn|yn|en"

比如"1|3|1,-5|-3|0"等任意组合都可以
sim 双精度浮点数:相似度,取值范围0.1-1.0
dir 整形数:查找方向 0: 从左到右,从上到下 1: 从左到右,从下到上 2: 从右到左,从上到下 3: 从右到左, 从下到上



返回值: 

字符串:
返回所有形状的坐标值,然后通过GetResultCount等接口来解析(由于内存限制,返回的坐标数量最多为1800个左右)

示例:


dm_ret = dm.FindShapeEx(0,0,2000,2000,"1|1|0,1|6|1,0|10|1,9|10|1,7|6|1,7|8|0,8|9|0,2|2|1,3|1|1",1.0,1)
count = dm.GetResultCount(dm_ret)
index = 0
Do While index < count 
   aa = dm.GetResultPos(dm_ret,index,intX,intY)
   dm.MoveTo intX,intY
   index = index + 1
   Delay  1000
Loop

FreePic
函数简介:

释放指定的图片,此函数不必要调用,除非你想节省内存.

函数原型:

long FreePic(pic_name)

参数定义:

pic_name 字符串: 文件名比如"1.bmp|2.bmp|3.bmp" 等,可以使用通配符,比如

          "*.bmp" 这个对应了所有的bmp文件

          "a?c*.bmp" 这个代表了所有第一个字母是a 第三个字母是c 第二个字母任意的所有bmp文件

          "abc???.bmp|1.bmp|aa??.bmp" 可以这样任意组合.



返回值:

整形数:
0:失败
1:成功

示例:


PutAttachment "c: est","*.bmp"
dm_ret = dm.SetPath("c: est")

all_pic = "1.bmp|2.bmp|3.bmp"
dm_ret = dm.LoadPic(all_pic)

dm_ret = dm.FreePic(all_pic)
GetAveHSV(
函数简介:

获取范围(x1,y1,x2,y2)颜色的均值,返回格式"H.S.V"

函数原型:

string GetAveHSV(x1,y1,x2,y2)

参数定义:

x1 整形数: 左上角X

y1 整形数: 左上角Y

x2 整形数: 右下角X

y2 整形数: 右下角Y

返回值:

字符串:
颜色字符串

示例:


color = dm.GetAveHSV(30,30,100,100)
MessageBox color

GetAveRGB
函数简介:

获取范围(x1,y1,x2,y2)颜色的均值,返回格式"RRGGBB"

函数原型:

string GetAveRGB(x1,y1,x2,y2)

参数定义:

x1 整形数: 左上角X

y1 整形数: 左上角Y

x2 整形数: 右下角X

y2 整形数: 右下角Y

返回值:

字符串:
颜色字符串

示例:


color = dm.GetAveRGB(30,30,100,100)
MessageBox color

GetColor
函数简介:

获取(x,y)的颜色,颜色返回格式"RRGGBB",注意,和按键的颜色格式相反

函数原型:

string GetColor(x,y)

参数定义:

x 整形数:X坐标
y 整形数:Y坐标

返回值:

字符串:
颜色字符串(注意这里都是小写字符,和工具相匹配)

示例:


color = dm.GetColor(30,30)
If color = "ffffff" Then
     MessageBox "是白色"
End If

GetColorBGR
函数简介:

获取(x,y)的颜色,颜色返回格式"BBGGRR"

函数原型:

string GetColorBGR(x,y)

参数定义:

x 整形数:X坐标
y 整形数:Y坐标

返回值:

字符串:
颜色字符串(注意这里都是小写字符,和工具相匹配)

示例:


color = dm.GetColorBGR(30,30)
If color = "0000ff" Then
      MessageBox "是红色"
End If
GetColorHSV
函数简介:

获取(x,y)的HSV颜色,颜色返回格式"H.S.V"

函数原型:

string GetColorHSV(x,y)

参数定义:

x 整形数:X坐标
y 整形数:Y坐标

返回值:

字符串:
颜色字符串

示例:


color = dm.GetColorHSV(30,30)
If color = "100.20.20" Then
      MessageBox "ok"
End If
GetColorNum
函数简介:

获取指定区域的颜色数量,颜色格式"RRGGBB-DRDGDB",注意,和按键的颜色格式相反

函数原型:

long GetColorNum(x1, y1, x2, y2, color, sim)

参数定义:

x1 整形数:区域的左上X坐标
y1 整形数:区域的左上Y坐标
x2 整形数:区域的右下X坐标
y2 整形数:区域的右下Y坐标
color 字符串:颜色 格式为"RRGGBB-DRDGDB",比如"123456-000000|aabbcc-202020"
sim 双精度浮点数:相似度,取值范围0.1-1.0

返回值: 

整形数:
颜色数量

示例:


TracePrint dm.GetColorNum(0,0,2000,2000,"123456-000000|aabbcc-030303|ddeeff-202020",1.0)
GetPicSize









函数简介:

获取指定图片的尺寸,如果指定的图片已经被加入缓存,则从缓存中获取信息.
此接口也会把此图片加入缓存. 

函数原型:

string GetPicSize(pic_name)

参数定义:

pic_name 字符串: 文件名比如"1.bmp"

返回值:

字符串:
形式如 "w,h" 比如"30,20"

示例:


PutAttachment "c: est","*.bmp"
dm_ret = dm.SetPath("c: est")

pic_size = dm.GetPicSize("1.bmp")
pic_size = split(pic_size,",")
w = int(pic_size(0))
h = int(pic_size(1))
Trace "宽度:"&w
Trace "高度:"&h
GetScreenData
函数简介:

获取指定区域的图像,用二进制数据的方式返回,(不适合按键使用)方便二次开发.

函数原型:

long GetScreenData(x1,y1,x2,y2)

参数定义:

x1 整形数:区域的左上X坐标
y1 整形数:区域的左上Y坐标
x2 整形数:区域的右下X坐标
y2 整形数:区域的右下Y坐标

返回值:

整形数:
返回的是指定区域的二进制颜色数据地址,每个颜色是4个字节,表示方式为(00RRGGBB)

示例:

无示例,开发者都懂的。



注意,调用完此接口后,返回的数据指针在当前dm对象销毁时,或者再次调用GetScreenData时,会自动释放.

从2.1120版本之后,调用完此函数后,没必要再调用FreenScreenData了,插件会自动释放.

GetScreenDataBmp
函数简介:

获取指定区域的图像,用24位位图的数据格式返回,(不适合按键使用)方便二次开发. <收费功能,具体详情点击查看>

函数原型:

long GetScreenDataBmp(x1,y1,x2,y2,data,size)

参数定义:

x1 整形数:区域的左上X坐标
y1 整形数:区域的左上Y坐标
x2 整形数:区域的右下X坐标
y2 整形数:区域的右下Y坐标
data 变参指针:返回图片的数据指针
size 变参指针:返回图片的数据长度

返回值:

整形数:
0 : 失败
1 : 成功

示例:

以下是在E语言中的示例.

.局部变量 data, 整数型

.局部变量 size, 整数型

dm.数值方法 (“GetScreenDataBmp”, 0, 0, 100, 200, data, size)

图片框1.图片 = 指针到字节集 (data, size)

ImageToBmp

函数简介:

转换图片格式为24位BMP格式.

函数原型:

long ImageToBmp(pic_name,bmp_name)

参数定义:

pic_name 字符串: 要转换的图片名
bmp_name 字符串: 要保存的BMP图片名 

返回值:

整形数:
0 : 失败

1 : 成功

示例:


dm.ImageToBmp "1.png","1.bmp"
dm.ImageToBmp "2.jpg","2.bmp"
dm.ImageToBmp "3.gif","3.bmp"


LoadPic
函数简介:

预先加载指定的图片,这样在操作任何和图片相关的函数时,将省去了加载图片的时间。调用此函数后,没必要一定要调用FreePic,插件自己会自动释放.

另外,此函数不是必须调用的,所有和图形相关的函数只要调用过一次,图片会自动加入缓存.

如果想对一个已经加入缓存的图片进行修改,那么必须先用FreePic释放此图片在缓存中占用

的内存,然后重新调用图片相关接口,就可以重新加载此图片. 

函数原型:

long LoadPic(pic_name)

参数定义:

pic_name 字符串: 文件名比如"1.bmp|2.bmp|3.bmp" 等,可以使用通配符,比如

          "*.bmp" 这个对应了所有的bmp文件

          "a?c*.bmp" 这个代表了所有第一个字母是a 第三个字母是c 第二个字母任意的所有bmp文件

          "abc???.bmp|1.bmp|aa??.bmp" 可以这样任意组合.

返回值:

整形数:
0:失败
1:成功

示例:


PutAttachment "c: est","*.bmp"
dm_ret = dm.SetPath("c: est")

all_pic = "abc???.bmp|1.bmp|aa??.bmp"
dm_ret = dm.LoadPic(all_pic)
MatchPicName
函数简介:

根据通配符获取文件集合. 方便用于FindPic和FindPicEx

函数原型:

string MatchPicName(pic_name)

参数定义:

pic_name 字符串: 文件名比如"1.bmp|2.bmp|3.bmp" 等,可以使用通配符,比如

          "*.bmp" 这个对应了所有的bmp文件

          "a?c*.bmp" 这个代表了所有第一个字母是a 第三个字母是c 第二个字母任意的所有bmp文件

          "abc???.bmp|1.bmp|aa??.bmp" 可以这样任意组合.

返回值:

字符串:
返回的是通配符对应的文件集合,每个图片以|分割

示例:


PutAttachment "c: est","*.bmp"
dm_ret = dm.SetPath("c: est")

all_pic = "abc*.bmp"
pic_name = dm.MatchPicName(all_pic)



// 比如c: est目录下有abc001.bmp abc002.bmp abc003.bmp

// 那么pic_name 的值为abc001.bmp|abc002.bmp|abc003.bmp

RGB2BGR
函数简介:

把RGB的颜色格式转换为BGR(按键格式)

函数原型:

string RGB2BGR(rgb_color)

参数定义:

rgb_color 字符串:rgb格式的颜色字符串

返回值:

字符串:
BGR格式的字符串

示例:


bgr_color = dm.RGB2BGR(rgb_color)

SetPicPwd(

函数简介:

设置图片密码,如果图片本身没有加密,那么此设置不影响不加密的图片,一样正常使用.

函数原型:

long SetPicPwd(pwd)

参数定义:

pwd 字符串: 图片密码

返回值:

整形数:
0 : 失败

1 : 成功

示例:


dm_ret = dm.SetPicPwd("123")


文件
DecodeFile
函数简介:

解密指定的文件.  <收费功能,具体详情点击查看>

函数原型:

long DecodeFile(file,pwd)

参数定义:

file 字符串: 文件名.

pwd 字符串: 密码.

返回值:

整形数:
0 : 失败
1 : 成功

示例:

// 绝对路径
dm.DecodeFile "c: est_gamecfg.ini","1234"

// 相对路径
dm.SetPath "c: est_game"
dm.DecodeFile "1.bmp","1234"

如果此文件没加密,调用此函数不会有任何效果.
插件所有的字库 图片 ini都是用此接口来解密.
EncodeFile
函数简介:

加密指定的文件.  <收费功能,具体详情点击查看>

函数原型:

long EncodeFile(file,pwd)

参数定义:

file 字符串: 文件名.

pwd 字符串: 密码.

返回值:

整形数:
0 : 失败
1 : 成功

示例:

// 绝对路径
dm.EncodeFile "c: est_gamecfg.ini","1234"

// 相对路径
dm.SetPath "c: est_game"
dm.EncodeFile "1.bmp","1234"

如果此文件已经加密,调用此函数不会有任何效果.
插件所有的字库 图片 ini都是用此接口来加密.
ReadIni
函数简介:

从Ini中读取指定信息. 

函数原型:

string ReadIni(section,key,file)

参数定义:

section 字符串: 小节名

key 字符串: 变量名.

file 字符串: ini文件名.

返回值:

字符串:
字符串形式表达的读取到的内容

示例:

// 绝对路径
Text = dm.ReadIni("Global","var1","c: est_gamecfg.ini")

// 相对路径
dm.SetPath "c: est_game"
Text = dm.ReadIni("Global","var1","cfg.ini")

注 : 此函数是多线程安全的. 多线程同时读写同个文件不会造成文件错乱.

ReadIniPwd
函数简介:

从Ini中读取指定信息.可支持加密文件       <收费功能,具体详情点击查看>

函数原型:

string ReadIniPwd(section,key,file,pwd)

参数定义:

section 字符串: 小节名

key 字符串: 变量名.

file 字符串: ini文件名.

pwd 字符串: 密码

返回值:

字符串:
字符串形式表达的读取到的内容

示例:

// 绝对路径
Text = dm.ReadIniPwd("Global","var1","c: est_gamecfg.ini","1234")

// 相对路径
dm.SetPath "c: est_game"
Text = dm.ReadIniPwd("Global","var1","cfg.ini","1234")

注 : 此函数是多线程安全的. 多线程同时读写同个文件不会造成文件错乱.

如果文件没加密,也可以正常读取.


WriteIni
函数简介:

向指定的Ini写入信息.  

函数原型:

long WriteIni(section,key,value,file)

参数定义:

section 字符串: 小节名

key 字符串: 变量名.

value 字符串: 变量内容

file 字符串: ini文件名.

返回值:

整形数:
0 : 失败
1 : 成功

示例:

// 绝对路径
dm.WriteIni "Global","var1","123","c: est_gamecfg.ini"

// 相对路径
dm.SetPath "c: est_game"
dm.WriteIni "Global","var1","123","cfg.ini"

注 : 此函数是多线程安全的. 多线程同时读写同个文件不会造成文件错乱.

WriteIniPwd
函数简介:

向指定的Ini写入信息.支持加密文件  <收费功能,具体详情点击查看>

函数原型:

long WriteIniPwd(section,key,value,file,pwd)

参数定义:

section 字符串: 小节名

key 字符串: 变量名.

value 字符串: 变量内容

file 字符串: ini文件名.

pwd 字符串: 密码.

返回值:

整形数:
0 : 失败
1 : 成功

示例:

// 绝对路径
dm.WriteIniPwd "Global","var1","123","c: est_gamecfg.ini","1234"

// 相对路径
dm.SetPath "c: est_game"
dm.WriteIniPwd "Global","var1","123","cfg.ini","1234"

注 : 此函数是多线程安全的. 多线程同时读写同个文件不会造成文件错乱.

如果此文件没加密,调用此函数会自动加密

QQ:254595754 手机号:15074704856
原文地址:https://www.cnblogs.com/xiongyunsheng/p/11254333.html