
按键精灵脚本教程单线程操作多窗口.docx
10页本文格式为Word版,下载可任意编辑按键精灵脚本教程单线程操作多窗口 按键精灵脚本教程:单线程操作多窗口 来源:按键学院【按键精灵】 不开多线程,在单线程内如何对多个窗口分别举行操作,以实现多开目的? 让我们一起来了解了解~~ 内容提要 本例中,讲解的是使用大漠插件,通过创造多个大漠对象,切换大漠对象对多窗口分别举行操作 『1』获取要绑定的窗口句柄,存放在窗口句柄数组中 『2』有几个窗口就创造几个大漠对象 『3』创造一个公用对象,用于切换 『4』循环切换大漠对象,分别绑定对应的窗口 『5』循环切换大漠对象,分别操作对应的窗口 获取窗口句柄 1、循环等待按键,假设按下的是F7键,那么获取当前鼠标指向的窗口句柄 2、获取窗口句柄存放到窗口句柄数组中 3、假设按下的是F8键,那么退出do循环,持续后续的操作 『代码』 Dim hwnd_all(100)//当我们不知道用户会启动多少个窗口的时候,可以把数组定义大一点 Do While key 119 //没有按下F8则进入循环 Key = WaitKey() //等待按键并且获取按键码 If key = 118 Then //如果按下F7则将变量js加1 js=js+1 hwnd_all(js) = Plugin.Window.MousePoint() //获取当前鼠标指向的窗口的窗口句柄存放到数组hwnd_all中End If Loop 『分析』 ◎ Do While key 119 Do循环分为前判断和后判断, 它们的识别在于,前判断是先判断条件符不符合然后进入循环体, 而后判断是先进入循环体执行一次之后再举行判断: 前判断: Do while 条件 Loop 后判断: Do Loop while 条件 创造大漠对象 “刚接触大漠的童鞋可能对于对象的概念对比模糊。
其实作为一个单纯的使用者,暂时不需要去了解更深的原理咱们只需知道想要用大漠的命令,就要拿到它的使用权 而建立大漠对象就是获取使用权的步骤 有没有童鞋是这样认为的:觉得大漠的命令确定是 dm.moveto x,y 或者 dm.ver 认为确定要以dm.什么的形式来使用命令 其实不是这样的,你可以这样使用大漠命令,xx.moveto x,y 或者 oo.moveto x,y 咱欣喜用什么就用什么这个取决于我们创造大漠对象时所命名的对象名 『例如』 我们创造一个大漠对象,命名为ha : Set ha = createobject("dm.dmsoft") 那么,咱们在使用大漠命令的时候,就理应这样使用: ha.moveto x,y 『语法』 Set 对象= createobject("dm.dmsoft") //创造大漠对象 对象.moveto x,y //使用命令 我们现在回到例子中,一个窗口对应创造一个大漠对象 窗口和对象之间的关系要怎么理解呢? 为什么不多个窗口共用一个对象呢? 『例如』 咱们是一家拥有上千保姆的家政公司。
一个家庭比作一个窗口,一个保姆比作一个对象 咱们把保姆派到一个家庭之后,保姆才能接收并且执行咱们下达的命令 一个保姆对应一个家庭,轻轻松松 但是当一个保姆要对应10个家庭,她要怎么办呢? 这家擦了个地板又跑到那家擦个玻璃 一个对象在第一个窗口执行了一个动作解绑之后绑定其次个窗口,其次个窗口执行一个动作解绑,然后再去绑定第三个窗口……绑定和解绑是分外花费系统资源的,所以这里不提倡这种做法 『代码』 // 声明对象(有几个窗口声明几个) ReDim dm_all(js) For i= 1 to js // 分别创造对象,对象存放在数组中 Set dm_all(i) = createobject("dm.dmsoft") Next 『留神』 按键中不支持数组形式对象直接使用命令,例如: dm_all(0).moveto x,y 不支持这样使用 『所以』 我们需要创造一个公用的对象,用于将数组形式的对象转为变量名形式的对象,作为对象切换的一个容器 //////声明公共对象,用于切换////// Set dm = nothing //创造空的对象 切换对象绑定窗口 有多少个窗口就循环几次绑定窗口,咱们的窗口数量是js,循环js次,代码如下: 『代码』 For i = 1 To js Call 切换对象(i) dm_ret = dm.BindWindow(hwnd_all(i), "dx", "windows", "windows", 0) // 检测返回值 If dm_ret = 0 Then MessageBox "绑定失败" EndScript End If // 分别设置路径字库等 // Call 切换对象(i) // dm.SetPath "c:\test" // dm.SetDict 0,"test.txt" Next Sub 切换对象(index) Set dm = dm_all(index) End Sub 『分析』 ◎进入for循环调用子程序“切换对象”,把i的值传递给子程序。
◎“切换对象”子程序中将当前的大漠对象,dm_all(index) 赋值给dm ◎返回到for循环中,绑定对应的窗口 操作 脚本的主循环,通过不断的切换对象,向对应的对象下达操作,从而实现脚本多开的目的但是需要留神一点,由于是切换对象举行操作的,所以对这些窗口的操作并不是同时举行的第一个窗口执行完之后才会其次个窗口,顺延下去 『代码』 // 脚本主循环 Do For i = 1 To js Call 切换对象(i) Call 操作(i) Delay 1000 Next Loop Sub 操作(index) dm.SendString hwnd_all(index),index dm.keypress 13 End Sub 整体代码 Call 大漠注册() ///////获取要绑定的窗口句柄//////// Dim hwnd_all(1000 ) Do While key 119 Key = WaitKey() If key = 118 Then js=js+1 hwnd_all(js) = Plugin.Window.MousePoint() TracePrint hwnd_all(js) End If Loop ///// 声明对象(有几个窗口声明几个) ReDim dm_all(js) For i= 1 to js // 分别创造对象 Set dm_all(i) = createobject("dm.dmsoft") Next //////声明公共对象////// Set dm = nothing /////////// 分别绑定窗口/////////////// For i = 1 To js Call 切换对象(i) dm_ret = dm.BindWindow(hwnd_all(i), "dx", "windows", "windows", 0) // 检测返回值 If dm_ret = 0 Then MessageBox "绑定失败" EndScript End If // 分别设置路径字库等 // Call 切换对象(i) // dm.SetPath "c:\test" // dm.SetDict 0,"test.txt" Next /////////// 脚本主循环/////////////// Do For i = 1 To js Call 切换对象(i) Call 操作(i) Delay 200 Next Loop Sub 切换对象(index) Set dm = dm_all(index) End Sub Sub 操作(index) dm.SendString hwnd_all(index),index dm.keypress 13 End Sub ///////// 分别解绑窗口////////// Sub OnScriptExit() For i = 1 To js Call 切换对象(i) dm_ret = dm.UnBindWindow() Next End Sub /////////////注册大漠插件/////////// Sub 大漠注册() Set ws = createobject("Wscript.Shell") ws.run "regsvr32 atl.dll /s" Set ws = nothing PutAttachment "c:\guoer", "dm.dll" PutAttachment ".\Plugin" ,"RegDll.dll" call Plugin.RegDll.Reg ( "c:\guoer\dm.dll") Set dm = createobject("dm.dmsoft") ver = dm.ver() If len(ver) = 0 Then MessageBox "插件注册失败,检查系统是否禁用了vbs脚本权限" EndScript End If End Sub — 10 —。












