不会用多线程单线程也可以操作多窗口

以下内容转载自按键精灵学院院刊感谢大大的支持与热心分享!

⊙◎○●”·.单线程也可以操作多窗口.·“●○◎⊙

内容提要

获取窗口句柄

『代码』

1.Dimhwnd_all()//当我们不知道用户会启动多少个窗口的时候,可以把数组定义大一点。

2.DoWhilekey//没有按下F8则进入循环

3.Key=WaitKey()//等待按键并且获取按键码

4.Ifkey=Then//如果按下F7则将变量js加1

5.js=js+1

6.hwnd_all(js)=Plugin.Window.MousePoint()//获取当前鼠标指向的窗口的窗口句柄存放到数组hwnd_all中

7.EndIf

8.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=1tojs

4.//分别创建对象,对象存放在数组中

5.Setdm_all(i)=createobject("dm.dmsoft")

6.Next

『注意』按键中不支持数组形式对象直接使用命令,例如:dm_all(0).movetox,y不支持这样使用。『所以』我们需要创建一个公用的对象,用于将数组形式的对象转为变量名形式的对象,作为对象切换的一个容器。

1.//////声明公共对象,用于切换//////

2.Setdm=nothing//创建空的对象

切换对象绑定窗口

『代码』

1.Fori=1Tojs

2.Call切换对象(i)

3.dm_ret=dm.BindWindow(hwnd_all(i),"dx","windows","windows",0)

4.//检测返回值

5.Ifdm_ret=0Then

6.MessageBox"绑定失败"

7.EndScript

8.EndIf

9.//分别设置路径字库等

10.//Call切换对象(i)

11.//dm.SetPath"c:\test"

12.//dm.SetDict0,"test.txt"

13.Next

14.Sub切换对象(index)

15.Setdm=dm_all(index)

16.EndSub

『分析』进入for循环调用子程序“切换对象”,把i的值传递给子程序。“切换对象”子程序中将当前的大漠对象,dm_all(index)赋值给dm返回到for循环中,绑定对应的窗口。操作

『代码』

1.//脚本主循环

2.Do

3.Fori=1Tojs

4.Call切换对象(i)

5.Call操作(i)

6.Delay0

7.Next

8.Loop

9.Sub操作(index)

10.dm.SendStringhwnd_all(index),index

11.dm.keypress13

12.EndSub

整体代码

1.Call大漠注册()

2.///////获取要绑定的窗口句柄////////

3.Dimhwnd_all(0)

4.DoWhilekey

5.Key=WaitKey()

6.Ifkey=Then

7.js=js+1

8.hwnd_all(js)=Plugin.Window.MousePoint()

9.TracePrinthwnd_all(js)

10.EndIf

11.Loop

12./////声明对象(有几个窗口声明几个)

13.ReDimdm_all(js)

14.Fori=1tojs

15.//分别创建对象

16.Setdm_all(i)=createobject("dm.dmsoft")

17.Next

18.//////声明公共对象//////

19.Setdm=nothing

20.///////////分别绑定窗口///////////////

21.Fori=1Tojs

22.Call切换对象(i)

23.dm_ret=dm.BindWindow(hwnd_all(i),"dx","windows","windows",0)

24.//检测返回值

25.Ifdm_ret=0Then

26.MessageBox"绑定失败"

27.EndScript

28.EndIf

29.//分别设置路径字库等

30.//Call切换对象(i)

31.//dm.SetPath"c:\test"

32.//dm.SetDict0,"test.txt"

33.Next

34.///////////脚本主循环///////////////

35.Do

36.Fori=1Tojs

37.Call切换对象(i)

38.Call操作(i)

39.Delay

40.Next

41.Loop

42.Sub切换对象(index)

43.Setdm=dm_all(index)

44.EndSub

45.Sub操作(index)

46.dm.SendStringhwnd_all(index),index

47.dm.keypress13

48.EndSub

49./////////分别解绑窗口//////////

50.SubOnScriptExit()

51.Fori=1Tojs

52.Call切换对象(i)

53.dm_ret=dm.UnBindWindow()

54.Next

55.EndSub

56./////////////注册大漠插件///////////

57.Sub大漠注册()

58.Setws=createobject("Wscript.Shell")

59.ws.run"regsvr32atl.dll/s"

60.Setws=nothing

61.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)=0Then

67.MessageBox"插件注册失败,检查系统是否禁用了vbs脚本权限"

68.EndScript

69.EndIf

70.EndSub

更多精彩内容,欢迎


转载请注明:http://www.aierlanlan.com/grrz/7355.html

  • 上一篇文章:
  •   
  • 下一篇文章: