以下内容转载自按键精灵学院院刊感谢大大的支持与热心分享!
⊙◎○●”·.单线程也可以操作多窗口.·“●○◎⊙
内容提要
获取窗口句柄
『代码』
1.Dimhwnd_all()//当我们不知道用户会启动多少个窗口的时候,可以把数组定义大一点。2.DoWhilekey//没有按下F8则进入循环3.Key=WaitKey()//等待按键并且获取按键码4.Ifkey=Then//如果按下F7则将变量js加15.js=js+16.hwnd_all(js)=Plugin.Window.MousePoint()//获取当前鼠标指向的窗口的窗口句柄存放到数组hwnd_all中7.EndIf8.Loop『分析』DoWhilekeyDo循环分为前判断和后判断,它们的区别在于,前判断是先判断条件符不符合然后进入循环体,而后判断是先进入循环体执行一次之后再进行判断:前判断:Dowhile条件Loop后判断:DoLoopwhile条件创建大漠对象
有没有童鞋是这样认为的:觉得大漠的命令一定是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//使用命令我们现在回到例子中,一个窗口对应创建一个大漠对象。窗口和对象之间的关系要怎么理解呢?为什么不多个窗口共用一个对象呢?『例如』
『代码』
1.//声明对象(有几个窗口声明几个)2.ReDimdm_all(js)3.Fori=1tojs4.//分别创建对象,对象存放在数组中5.Setdm_all(i)=createobject("dm.dmsoft")6.Next『注意』按键中不支持数组形式对象直接使用命令,例如:dm_all(0).movetox,y不支持这样使用。『所以』我们需要创建一个公用的对象,用于将数组形式的对象转为变量名形式的对象,作为对象切换的一个容器。
1.//////声明公共对象,用于切换//////2.Setdm=nothing//创建空的对象切换对象绑定窗口
『代码』
1.Fori=1Tojs2.Call切换对象(i)3.dm_ret=dm.BindWindow(hwnd_all(i),"dx","windows","windows",0)4.//检测返回值5.Ifdm_ret=0Then6.MessageBox"绑定失败"7.EndScript8.EndIf9.//分别设置路径字库等10.//Call切换对象(i)11.//dm.SetPath"c:\test"12.//dm.SetDict0,"test.txt"13.Next14.Sub切换对象(index)15.Setdm=dm_all(index)16.EndSub『分析』进入for循环调用子程序“切换对象”,把i的值传递给子程序。“切换对象”子程序中将当前的大漠对象,dm_all(index)赋值给dm返回到for循环中,绑定对应的窗口。操作
『代码』
1.//脚本主循环2.Do3.Fori=1Tojs4.Call切换对象(i)5.Call操作(i)6.Delay07.Next8.Loop9.Sub操作(index)10.dm.SendStringhwnd_all(index),index11.dm.keypress1312.EndSub整体代码
1.Call大漠注册()2.///////获取要绑定的窗口句柄////////3.Dimhwnd_all(0)4.DoWhilekey5.Key=WaitKey()6.Ifkey=Then7.js=js+18.hwnd_all(js)=Plugin.Window.MousePoint()9.TracePrinthwnd_all(js)10.EndIf11.Loop12./////声明对象(有几个窗口声明几个)13.ReDimdm_all(js)14.Fori=1tojs15.//分别创建对象16.Setdm_all(i)=createobject("dm.dmsoft")17.Next18.//////声明公共对象//////19.Setdm=nothing20.///////////分别绑定窗口///////////////21.Fori=1Tojs22.Call切换对象(i)23.dm_ret=dm.BindWindow(hwnd_all(i),"dx","windows","windows",0)24.//检测返回值25.Ifdm_ret=0Then26.MessageBox"绑定失败"27.EndScript28.EndIf29.//分别设置路径字库等30.//Call切换对象(i)31.//dm.SetPath"c:\test"32.//dm.SetDict0,"test.txt"33.Next34.///////////脚本主循环///////////////35.Do36.Fori=1Tojs37.Call切换对象(i)38.Call操作(i)39.Delay40.Next41.Loop42.Sub切换对象(index)43.Setdm=dm_all(index)44.EndSub45.Sub操作(index)46.dm.SendStringhwnd_all(index),index47.dm.keypress1348.EndSub49./////////分别解绑窗口//////////50.SubOnScriptExit()51.Fori=1Tojs52.Call切换对象(i)53.dm_ret=dm.UnBindWindow()54.Next55.EndSub56./////////////注册大漠插件///////////57.Sub大漠注册()58.Setws=createobject("Wscript.Shell")59.ws.run"regsvr32atl.dll/s"60.Setws=nothing61.PutAttachment"c:\guoer","dm.dll"62.PutAttachment".\Plugin","RegDll.dll"63.callPlugin.RegDll.Reg("c:\guoer\dm.dll")64.Setdm=createobject("dm.dmsoft")65.ver=dm.ver()66.Iflen(ver)=0Then67.MessageBox"插件注册失败,检查系统是否禁用了vbs脚本权限"68.EndScript69.EndIf70.EndSub更多精彩内容,欢迎