函数简介:

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

函数原型:

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.apidx.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有崩溃问题,可以尝试此模式. <收费功能,具体详情点击查看>

需要注意的是: 模式1 3 5 7 101 103在大部分窗口下绑定都没问题。但也有少数特殊的窗口,比如有很多子窗口的窗口,对于这种窗口,在绑定时,一定要把鼠标指向一个可以输入文字的窗口,比如一个文本框,最好能激活这个文本框,这样可以保证绑定的成功.

返回值:

整形数:
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,那么不要连续取色等,键鼠也是一样.

 

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

 

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

 

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

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

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

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.     窗口所在进程有保护,这个我也无能为力.