⊙◎○●”·.单线程也可以操作多窗口.·“●○◎⊙
本文由按键学院提供技术支持
不开多线程,在单线程内如何对多个窗口分别进行操作,以实现多开目的? 让我们一起来了解了解~~ |
|
内容提要
本例中,讲解的是使用大漠插件,通过创建多个大漠对象,切换大漠对象对多窗口分别进行操作。 |
『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
复制代码 Q文件下载:- 您所在的用户组无法下载或查看附件
『效果演示』
- 您所在的用户组无法下载或查看附件
本文由按键学院提供技术支持
||▍|▍▍||▍| ▍|▍▍||▍| ▍|▍▍||▍|▍▍||▍| ▍|▍▍||▍| ▍|▍▍||
有钱,就是任性!按键学院的导师就是土豪!
按键学院实战班