绑定指定的窗口

3Q4T网

 3Q4T网

函数简介:

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

函数原型:

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下,可能会导致部分窗口卡死. 这个属性可以避免卡死. <收费功能,具体详情点击查看>
16    "dx.public.ori.proc"  
此属性只能用在模式0 1 2 3101. 有些窗口在不同的界面下(比如登录界面和登录进以后的界面)键鼠的控制效果不相同. 那可以用这个属性来尝试让保持一致. 注意的是,这个属性不可以滥用,确保测试无问题才可以使用. 否则可能会导致后台失效. <收费功能,具体详情点击查看>

 

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