跳到主要内容

BindWindowEx 绑定窗口Ex

🎯功能

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

💰 含付费功能

本接口的参数属性包含大量付费功能, 请仔细阅读.

📜语法

结果 = dm.BindWindowEx(窗口句柄, 图色属性, 鼠标属性, 键盘属性, 公共属性, 模式)

📥参数

参数数据类型解释
窗口句柄整型数待绑定的窗口句柄
图色属性字符串获取屏幕画面颜色的方式, 取值如下表格
鼠标属性字符串模拟鼠标操作的方式, 取值如下表格
键盘属性字符串模拟键盘操作的方式, 取值如下表格
公共属性字符串对图色键盘鼠标都有影响的属性, 取值如下表格
模式整型数绑定的模式, 对图色鼠标键盘均有影响, 免费版与付费版取值有所不同.
各属性模式可取值表格
参数图色属性说明
"normal"正常模式, 即平时用的前台模式
"gdi"gdi模式,用于窗口采用GDI方式刷新时. 此模式占用CPU较大. 参考SetAero, win10以上系统使用此模式,如果截图失败,尝试把目标程序重新开启再试试
"gdi2"gdi2模式,此模式兼容性较强,但是速度比gdi模式要慢许多,如果gdi模式发现后台不刷新时,可以考虑用gdi2模式
"dx2"dx2模式,用于窗口采用dx模式刷新,如果dx方式会出现窗口所在进程崩溃的状况,可以考虑采用这种.采用这种方式要保证窗口有一部分在屏幕外.win7 win8或者vista不需要移动也可后台.此模式占用CPU较大. 参考SetAero, win10以上系统使用此模式,如果截图失败,尝试把目标程序重新开启再试试。
"dx3"dx3模式,同dx2模式,但是如果发现有些窗口后台不刷新时,可以考虑用dx3模式,此模式比dx2模式慢许多. 此模式占用CPU较大. 参考SetAero, win10以上系统使用此模式,如果截图失败,尝试把目标程序重新开启再试试。
"dx"用于窗口采用dx模式刷新,取值可以是以下任意组合,组合采用"|"符号进行连接. 支持BindWindow中的缩写模式. 比如dx代表"dx.graphic.2d|dx.graphic.3d"
"dx.graphic.2d"2d窗口的dx图色模式
"dx.graphic.2d.2"💰付费功能, 2d窗口的dx图色模式, 是dx.graphic.2d的增强模式. 兼容性更好
"dx.graphic.3d"3d窗口的dx图色模式, 注意采用这个模式,最好关闭窗口3D视频设置的全屏抗锯齿选项
"dx.graphic.3d.8"💰付费功能, 3d窗口的dx8图色模式, 此模式对64位进程无效, 注意采用这个模式,必须关闭窗口3D视频设置的全屏抗锯齿选项. 这个模式支持某些老的引擎
"dx.graphic.opengl"💰付费功能, 3d窗口的opengl图色模式,极少数窗口采用opengl引擎刷新. 此图色模式速度可能较慢. 有些窗口采用这个参数截图后, 上下是反向的, 可以在公共参数里增加dx.public.graphic.revert来反转
"dx.graphic.opengl.esv2"💰付费功能, 3d窗口的opengl_esv2图色模式,极少数窗口采用opengl引擎刷新. 此图色模式速度可能较慢. 有些窗口采用这个参数截图后,上下是反向的,可以在公共参数里增加dx.public.graphic.revert来反转
"dx.graphic.3d.10plus"💰付费功能, 3d窗口的dx10 dx11 dx12图色模式
参数鼠标属性说明
"normal"正常模式, 即平时用的前台模式
"windows"Windows模式,采取模拟windows消息方式, 同按键自带后台插件
"windows3"Windows3模式,采取模拟windows消息方式,可以支持有多个子窗口的窗口后台
"dx"取值可以是以下任意组合. 组合采用"
"dx.mouse.position.lock.api"此模式表示通过封锁系统API,来锁定鼠标位置
"dx.mouse.position.lock.message"此模式表示通过封锁系统消息,来锁定鼠标位置
"dx.mouse.focus.input.api"此模式表示通过封锁系统API来锁定鼠标输入焦点
"dx.mouse.focus.input.message"此模式表示通过封锁系统消息来锁定鼠标输入焦点
"dx.mouse.clip.lock.api"此模式表示通过封锁系统API来锁定刷新区域。注意,使用这个模式,在绑定前,必须要让窗口完全显示出来
"dx.mouse.input.lock.api"此模式表示通过封锁系统API来锁定鼠标输入接口
"dx.mouse.state.api"此模式表示通过封锁系统API来锁定鼠标输入状态
"dx.mouse.state.message"此模式表示通过封锁系统消息来锁定鼠标输入状态
"dx.mouse.api"此模式表示通过封锁系统API来模拟dx鼠标输入
"dx.mouse.cursor"💰付费功能, 开启此模式,可以后台获取鼠标特征码
"dx.mouse.raw.input"💰付费功能, 有些窗口需要这个才可以正常操作鼠标
"dx.mouse.input.lock.api2"💰付费功能, 部分窗口在后台操作时,前台鼠标会移动,需要这个属性
"dx.mouse.input.lock.api3"💰付费功能, 部分窗口在后台操作时,前台鼠标会移动,需要这个属性
参数键盘属性说明
"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"
"dx.keypad.input.lock.api"此模式表示通过封锁系统API来锁定键盘输入接口
"dx.keypad.state.api"此模式表示通过封锁系统API来锁定键盘输入状态
"dx.keypad.api"此模式表示通过封锁系统API来模拟dx键盘输入
"dx.keypad.raw.input"💰付费功能, 有些窗口需要这个才可以正常操作键盘
参数公共属性说明
""空字符串, 表示不使用公共属性, 也可以取以下任意组合, 多个值采用"|"连接
"dx.public.active.api"此模式表示通过封锁系统API来锁定窗口激活状态. 注意,部分窗口在此模式下会耗费大量资源慎用
"dx.public.active.message"此模式表示通过封锁系统消息来锁定窗口激活状态. 注意,部分窗口在此模式下会耗费大量资源 慎用. 另外如果要让此模式生效,必须在绑定前,让绑定窗口处于激活状态,否则此模式将失效. 比如dm.SetWindowState hwnd,1 然后再绑定
"dx.public.disable.window.position"此模式将锁定绑定窗口位置. 不可与"dx.public.fake.window.min"共用
"dx.public.disable.window.size"此模式将锁定绑定窗口,禁止改变大小. 不可与"dx.public.fake.window.min"共用
"dx.public.disable.window.minmax"此模式将禁止窗口最大化和最小化,但是付出的代价是窗口同时也会被置顶. 不可与"dx.public.fake.window.min"共用
"dx.public.fake.window.min"💰付费功能, 此模式将允许目标窗口在最小化状态时,仍然能够像非最小化一样操作. 另注意,此模式会导致任务栏顺序重排,所以如果是多开模式下,会看起来比较混乱,建议单开使用,多开不建议使用. 同时此模式不是万能的,有些情况下最小化以后图色会不刷新或者黑屏
"dx.public.hide.dll"💰付费功能, 此模式将会隐藏目标进程的大漠插件,避免被检测. 另外使用此模式前,请仔细做过测试,此模式可能会造成目标进程不稳定,出现崩溃
"dx.public.active.api2"💰付费功能, 此模式表示通过封锁系统API来锁定窗口激活状态. 部分窗口遮挡无法后台,需要这个属性
"dx.public.input.ime"💰付费功能, 此模式是配合SendStringIme使用. 具体可以查看SendStringIme接口
"dx.public.graphic.protect"💰付费功能, 此模式可以保护dx图色不被恶意检测.同时对dx.keypad.apidx.mouse.api也有保护效果. 这个参数可能会导致某些情况下目标图色失效.一般出现在场景重新加载的时候. 重新绑定会恢复
"dx.public.disable.window.show"💰付费功能, 禁止目标窗口显示,这个一般用来配合dx.public.fake.window.min来使用
"dx.public.anti.api"💰付费功能, 此模式可以突破部分窗口对后台的保护
"dx.public.km.protect"💰付费功能, 此模式可以保护dx键鼠不被恶意检测.最好配合dx.public.anti.api一起使用. 此属性可能会导致部分后台功能失效
"dx.public.prevent.block"💰付费功能, 绑定模式1 3 5 7 101 103下,可能会导致部分窗口卡死. 这个属性可以避免卡死
"dx.public.ori.proc"💰付费功能, 此属性只能用在模式0 1 2 3101下. 有些窗口在不同的界面下(比如登录界面和登录进以后的界面),键鼠的控制效果不相同. 那可以用这个属性来尝试让保持一致. 注意的是,这个属性不可以滥用,确保测试无问题才可以使用. 否则可能会导致后台失效
"dx.public.down.cpu"💰付费功能, 此模式可以配合DownCpu来降低目标进程CPU占用. 当图色方式降低CPU无效时,可以尝试此种方式. 需要注意的是,当使用此方式降低CPU时,会让图色方式降低CPU失效
"dx.public.focus.message"💰付费功能, 当后台绑定后,后台无法正常在焦点窗口输入文字时,可以尝试加入此属性. 此属性会强制键盘消息发送到焦点窗口. 慎用此模式,此模式有可能会导致后台键盘在某些情况下失灵
"dx.public.graphic.speed"💰付费功能, 只针对图色中的dx模式有效.此模式会牺牲目标窗口的性能,来提高DX图色速度,尤其是目标窗口刷新很慢时,这个参数就很有用了
"dx.public.memory"💰付费功能, 让本对象突破目标进程防护,可以正常使用内存接口. 当用此方式使用内存接口时,内存接口的速度会取决于目标窗口的刷新率
"dx.public.inject.super"💰付费功能, 突破某些难以绑定的窗口. 此属性仅对除了模式02的其他模式有效
"dx.public.hack.speed"💰付费功能, 类似变速齿轮,配合接口HackSpeed使用
"dx.public.inject.c"💰付费功能, 突破某些难以绑定的窗口. 此属性仅对除了模式02的其他模式有效
"dx.public.graphic.revert"💰付费功能, 此模式将截图后的内容上下反向. 仅对图色模式为dx.graphic.opengldx.graphic.opengl.esv2生效
参数模式说明
0推荐模式此模式比较通用,而且后台效果是最好的
2同模式0,如果模式0有崩溃问题,可以尝试此模式. 注意0和2模式,当主绑定(第一个绑定同个窗口的对象)绑定成功后,那么调用主绑定的线程必须一致维持,否则线程一旦推出,对应的绑定也会消失
4同模式0,如果模式0有崩溃问题,可以尝试此模式. 免费版独有模式, 💰付费版不支持该模式.
101💰付费版功能, 超级绑定模式. 可隐藏目标进程中的dm.dll, 避免被恶意检测.效果要比dx.public.hide.dll好. 推荐使用
103💰付费版功能, 同模式101,如果模式101有崩溃问题,可以尝试此模式
11💰付费版功能, 需要加载驱动,适合一些特殊的窗口,如果前面的无法绑定,可以尝试此模式. 此模式不支持32位系统
13💰付费版功能, 需要加载驱动,适合一些特殊的窗口,如果前面的无法绑定,可以尝试此模式. 此模式不支持32位系统

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

📤返回

整型数, 0为失败, 1为成功.

💡示例

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

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

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

  1. 系统登录的帐号必须有Administrators权限
  2. 一些防火墙会防止插件注入窗口所在进程,比如360防火墙等,必须把dm.dll设置为信任.
  3. 还有一个比较弱智的可能性,那就是插件没有注册到系统中,这时CreateObject压根就是失败的. 检测对象是否创建成功很简单,如下代码
set dm = createobject("dm.dmsoft")
ver = dm.Ver()
If len(ver) = 0 Then
MessageBox "创建对象失败,检查系统是否禁用了vbs脚本权限"
EndScript
End If
  1. 在沙盘中开的窗口进程,绑定一些需要管理员权限的模式,会失败。 解决方法是要配置沙盘参数,具体如何配置参考沙盘绑定方法.
  2. 窗口所在进程有保护,这个我也无能为力.