BindWindow 绑定窗口
🎯功能
绑定指定的窗口,并指定这个窗口的屏幕颜色获取方式,鼠标仿真模式,键盘仿真模式,以及模式设定, 是BindWindowEx接口的简易版命令.
💰 含付费功能参数模式里含有一些付费功能, 详见下面解释说明.
📜语法
结果 = dm.BindWindow(窗口句柄, 图色属性, 鼠标属性, 键盘属性, 模式)
📥参数
参数数据类型解释窗口句柄整型数待绑定的窗口句柄图色属性字符串获取屏幕画面颜色的方式, 取值如下表格鼠标属性字符串模拟鼠标操作的方式, 取值如下表格键盘属性字符串模拟键盘操作的方式, 取值如下表格模式整型数绑定的模式, 对图色鼠标键盘均有影响, 免费版与付费版取值有所不同.
各属性模式可取值表格参数图色属性值说明"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模式,等同于BindWindowEx中,display设置的`"dx.graphic.2d参数鼠标属性值说明"normal"正常模式, 即平时用的前台模式"windows"Windows模式,采取模拟windows消息方式, 同按键自带后台插件"windows2"Windows2 模式,采取模拟windows消息方式(锁定鼠标位置) 此模式等同于BindWindowEx中的鼠标属性为以下组合`"dx.mouse.position.lock.api"windows3"Windows3模式,采取模拟windows消息方式,可以支持有多个子窗口的窗口后台"dx"dx模式,采用模拟dx后台鼠标模式,这种方式会锁定鼠标输入.有些窗口在此模式下绑定时,需要先激活窗口再绑定(或者绑定以后激活),否则可能会出现绑定后鼠标无效的情况.此模式等同于BindWindowEx中的鼠标属性为以下组合`"dx.public.active.api"dx2"dx2模式,这种方式类似于dx模式,但是不会锁定外部鼠标输入.有些窗口在此模式下绑定时,需要先激活窗口再绑定(或者绑定以后手动激活),否则可能会出现绑定后鼠标无效的情况. 此模式等同于BindWindowEx中的鼠标属性为以下组合`"dx.public.active.api参数键盘属性值说明"normal"正常模式, 即平时用的前台模式"windows"Windows模式,采取模拟windows消息方式, 同按键自带后台插件"dx"dx模式,采用模拟dx后台键盘模式。有些窗口在此模式下绑定时,需要先激活窗口再绑定(或者绑定以后激活),否则可能会出现绑定后键盘无效的情况. 此模式等同于BindWindowEx中的键盘属性为以下组合`"dx.public.active.api参数模式值说明0推荐模式此模式比较通用,而且后台效果是最好的2同模式0,如果模式0有崩溃问题,可以尝试此模式. 注意0和2模式,当主绑定(第一个绑定同个窗口的对象)绑定成功后,那么调用主绑定的线程必须一致维持,否则线程一旦推出,对应的绑定也会消失4同模式0,如果模式0有崩溃问题,可以尝试此模式. 免费版独有模式, 💰付费版不支持该模式.101💰付费版功能, 超级绑定模式. 可隐藏目标进程中的dm.dll, 避免被恶意检测.效果要比dx.public.hide.dll好. 推荐使用103💰付费版功能, 同模式101,如果模式101有崩溃问题,可以尝试此模式11💰付费版功能, 需要加载驱动,适合一些特殊的窗口,如果前面的无法绑定,可以尝试此模式. 此模式不支持32位系统13💰付费版功能, 需要加载驱动,适合一些特殊的窗口,如果前面的无法绑定,可以尝试此模式. 此模式不支持32位系统模式101和103在大部分窗口下绑定都没问题。但也有少数特殊的窗口,比如有很多子窗口的窗口,对于这种窗口,在绑定时,一定要把鼠标指向一个可以输入文字的窗口,比如一个文本框,最好能激活这个文本框,这样可以保证绑定的成功.
📤返回
整型数, 0为失败, 1为成功. 如果返回0,可以调用GetLastError来查看具体失败错误码,帮助分析问题.
💡示例
// display: 前台 鼠标:前台键盘:前台 模式0dm_ret = dm.BindWindow(hwnd,"normal","normal","normal",0)// display: dx 鼠标:前台 键盘:前台模式0dm_ret = dm.BindWindow(hwnd,"dx","normal","normal",0)// display: dx 鼠标:dx 后台 键盘: dx后台 模式1dm_ret = dm.BindWindow(hwnd,"dx","dx","dx",1) // display: dx 鼠标:windows3后台 键盘:windows后台 模式101dm_ret = dm.BindWindow(hwnd,"dx","windows3","windows",101)
📘备注
绑定之后, 所有的坐标都相对于窗口的客户区坐标(不包含窗口边框)
另外, 绑定窗口后, 必须加以下代码, 以保证所有资源正常释放
这个函数的意思是在脚本结束时,会调用这个函数。需要注意的是,目前的按键版本对于这个函数的执行不是线程级别的,也就是说,这个函数只会在主线程执行,子线程绑定的大漠对象,不保证完全释放。
Sub OnScriptExit() dm_ret = dm.UnBindWindow() End Sub
另外, 绑定dx会比较耗时间,请不要频繁调用此函数.
另外如果绑定的是dx,要注意不可连续操作dx,中间至少加个10MS的延时,否则可能会导致操作失败.比如绑定图色DX,那么不要连续取色等,键鼠也是一样.
还有一点特别要注意的是,有些窗口绑定之后必须加一定的延时,否则后台也无效.一般1秒到2秒的延时就足够.
发现绑定失败的几种可能(一般是需要管理员权限的模式才有可能会失败)
系统登录的帐号必须有Administrators权限
一些防火墙会防止插件注入窗口所在进程,比如360防火墙等,必须把dm.dll设置为信任.
还有一个比较弱智的可能性,那就是插件没有注册到系统中,这时CreateObject压根就是失败的. 检测对象是否创建成功很简单,如下代码
set dm = createobject("dm.dmsoft")ver = dm.Ver()If len(ver) = 0 Then MessageBox "创建对象失败,检查系统是否禁用了vbs脚本权限" EndScriptEnd If
在沙盘中开的窗口进程,绑定一些需要管理员权限的模式,会失败。 解决方法是要配置沙盘参数,具体如何配置参考沙盘绑定方法.
窗口所在进程有保护,这个我也无能为力.