按键精灵脚本教程:单线程操作多窗口

 时间:2024-10-17 04:05:08

1、内容提要本例中,讲解的是使用大漠插件,通过创建多个大漠对象,切换大漠对象对多窗口分别进行操作。『1』获取要绑定的窗口句柄,存放在窗口句柄数组中。『2』有几个窗口就创建几个大漠对象。『3』创建一个公用对象,用于切换。『4』循环切换大漠对象,分别绑定对应的窗口。『5』循环切换大漠对象,分别操作对应的窗口。

2、获取窗口句柄1、循环等待按键,如果按下的是F7键,则获取当前鼠标指向的窗口句柄。2、获取窗口句柄存放到窗口句柄数组中。3、如果按下的是F8键,则退出do循环,继续后续的操作。『代码』Dimhwnd_all(100)//当我们不知道用户会启动多少个窗口的时候,可以把数组定义大一点。DoWhilekey<>119//没有按下F8则进入循环Key=WaitKey()//等待按键并且获取按键码Ifkey=118Then//如果按下F7则将变量js加1js=js+1hwnd_all(js)=Plugin.Window.MousePoint()//获取当前鼠标指向的窗口的窗口句柄存放到数组hwnd_all中EndIfLoop

3、『分析』◎DoWhilekey<>119Do循环分为前判断和后判断,它们的区别在于,前判断是先判断条件符不符合然后进入循环体,而后判断是先进入循环体执行一次之后再进行判断:前判断:Dowhile条件Loop后判断:DoLoopwhile条件"{�pg�E02�idow-orphan; text-align:left; " >EndIfLoop

4、创建大漠对象“刚接触大漠的童鞋可能对于对象的概念比较模糊。其实作为一个单纯的使用者,暂时不需要去了解更深的原理。咱们只需知道橇秆苡螳想要用大漠的命令,就要拿到它的使用权。而建立大漠对象就是获取使用权的步骤。有没有童鞋是这样认为的:觉得大漠的命令一定是dm.movetox,y或者dm.ver认为一定要以dm.什么的形式来使用命令其实不是这样的,你可以这样使用大漠命令,xx.movetox,y或者oo.movetox,y咱高兴用什么就用什么。这个取决于我们创建大漠对象时所命名的对象名。『例如』我们创建一个大漠对象,命名为ha:Setha=createobject("dm.dmsoft")那么,咱们在使用大漠命令的时候,就应该这样使用:ha.movetox,y『语法』Set对象=createobject("dm.dmsoft")//创建大漠对象对象.movetox,y//使用命令我们现在回到例子中,一个窗口对应创建一个大漠对象。窗口和对象之间的关系要怎么理解呢?为什么不多个窗口共用一个对象呢?

5、『例如』咱们是一家拥有上千保姆的家政公司。一个家庭比作一个窗口,一个保姆比作一个对象。咱们把保姆派到一个家庭之后,保姆才能接收并且执行咱们下达的命令。一个保姆对应一个家庭,轻轻松松。但是当一个保姆要对应10个家庭,她要怎么办呢?这家擦了个地板又跑到那家擦个玻璃。一个对象在第一个窗口执行了一个动作解绑之后绑定第二个窗口,第二个窗口执行一个动作解绑,然后再去绑定第三个窗口……绑定和解绑是非常耗费系统资源的,所以这里不提倡这种做法。

6、『代码』//声明对象(有几个窗口声明几个)ReDimdm_all(js)Fori=1tojs//分别创建对象,对象存放在数组中Setdm_all(i)=createobject("dm.dmsoft")Next『注意』按键中不支持数组形式对象直接使用命令,例如:dm_all(0).movetox,y不支持这样使用。『所以』我们需要创建一个公用的对象,用于将数组形式的对象转为变量名形式的对象,作为对象切换的一个容器。//////声明公共对象,用于切换//////Setdm=nothing//创建空的对象

7、切换对象绑定窗口有多少个窗口就循环几次绑定窗口,愧技刈赙咱们的窗口数量是js,循环js次,代码如下:『代码』Fori=1TojsCall切换对象(i)dm_ret=dm.B足毂忍珩indWindow(hwnd_all(i),"dx","windows","windows",0)//检测返回值Ifdm_ret=0ThenMessageBox"绑定失败"EndScriptEndIf//分别设置路径字库等//Call切换对象(i)//dm.SetPath"c:\test"//dm.SetDict0,"test.txt"NextSub切换对象(index)Setdm=dm_all(index)EndSub『分析』◎进入for循环调用子程序“切换对象”,把i的值传递给子程序。◎“切换对象”子程序中将当前的大漠对象,dm_all(index)赋值给dm◎返回到for循环中,绑定对应的窗口。

8、操作脚本的主循环,通过不断的切换对象,向对应的对象下达操作,从而实现脚本多开的目的。但是需要注意一点,由于是切换对象进行操作的,所以对这些窗口的操作并不是同时进行的。第一个窗口执行完之后才会第二个窗口,顺延下去。『代码』//脚本主循环DoFori=1TojsCall切换对象(i)Call操作(i)Delay1000NextLoopSub操作(index)dm.SendStringhwnd_all(index),indexdm.keypress13EndSub

9、整体代码Call大漠注册()///////获取要绑定的窗口句柄////////Dimhwnd_all烫喇霰嘴(1000)DoWhilekey<>119Key=WaitKey()Ifkey=118Thenjs=js+1hwnd_all(js)=Plugin.Window.MousePoint()TracePrinthwnd_all(js)EndIfLoop/////声明对象(有几个窗口声明几个)ReDimdm_all(js)Fori=1tojs//分别创建对象Setdm_all(i)=createobject("dm.dmsoft")Next//////声明公共对象//////Setdm=nothing///////////分别绑定窗口///////////////Fori=1TojsCall切换对象(i)dm_ret=dm.BindWindow(hwnd_all(i),"dx","windows","windows",0)//检测返回值Ifdm_ret=0ThenMessageBox"绑定失败"EndScriptEndIf//分别设置路径字库等//Call切换对象(i)//dm.SetPath"c:\test"//dm.SetDict0,"test.txt"Next///////////脚本主循环///////////////DoFori=1TojsCall切换对象(i)Call操作(i)Delay200NextLoopSub切换对象(index)Setdm=dm_all(index)EndSubSub操作(index)dm.SendStringhwnd_all(index),indexdm.keypress13EndSub/////////分别解绑窗口//////////SubOnScriptExit()Fori=1TojsCall切换对象(i)dm_ret=dm.UnBindWindow()NextEndSub/////////////注册大漠插件///////////Sub大漠注册()Setws=createobject("Wscript.Shell")ws.run"regsvr32atl.dll/s"Setws=nothingPutAttachment"c:\guoer","dm.dll"PutAttachment".\Plugin","RegDll.dll"callPlugin.RegDll.Reg("c:\guoer\dm.dll")Setdm=createobject("dm.dmsoft")ver=dm.ver()Iflen(ver)=0ThenMessageBox"插件注册失败,检查系统是否禁用了vbs脚本权限"EndScriptEndIfEndSub

  • 关于魔兽世界单机版npc_vendor的列说明
  • 怀旧服东泉豹子 声望攻略
  • 电脑玩魔兽世界需要什么配置
  • 怎么从库尔提拉斯去赞达拉
  • 英雄联盟红月决模式那些英雄厉害
  • 热门搜索
    爱护地球手抄报 简单英语手抄报图片 以书为友手抄报 初中手抄报版面设计 汉字手抄报五年级 安全法制手抄报 我的一本课外书手抄报 热爱生命手抄报资料 低碳环保手抄报内容 关于语文的手抄报图片