按键精灵如何让多窗口同时操作!源码如下!!求助!! 30

//首先打包dm.dll和RegDll.dll到附件,当然如果你还有其它资源(字库,图片等)也可以一并打包//这个need_ver作为本脚本需要使用的插件版本.如果要换插... // 首先打包dm.dll和RegDll.dll到附件,当然如果你还有其它资源(字库,图片等)也可以一并打包
// 这个need_ver作为本脚本需要使用的插件版本. 如果要换插件时,记得更改这个值.
need_ver = "3.1233"
// 释放附件>>>>>>>>>>>>>>>>>>>
// 这里选择c盘的test-_game作为插件的基本目录 也就是SetPath对应的目录。所以所有资源都释放在此目录.
PutAttachment "F:\ASWD","dm.dll"
// 这里要用到RegDll来注册插件,所以必须释放到Plugin. 但是切记不能把dm.dll释放到Plugin.那会导致插件失效.
PutAttachment ".\Plugin" ,"RegDll.dll"
// 插件注册开始>>>>>>>>>>>>>>>>>>>
// 下面开始注册插件,先尝试用RegDll来注册.这里必须使用绝对路径。以免有别人把dm.dll释放在系统目录.造成版本错误.
Call Plugin.RegDll.Reg("F:\ASWD\dm.dll")
// 这里判断是否注册成功
set dm = createobject("dm.dmsoft")
ver = dm.Ver()
if ver <> need_ver then
// 先释放先前创建的dm
set dm = nothing
// 再尝试用regsvr32 来注册. 这里必须使用绝对路径。以免有别人把dm.dll释放在系统目录.造成版本错误.
set ws=createobject("Wscript.Shell")
ws.run "regsvr32 F:\ASWD\dm.dll /s"
set ws=nothing
Delay 1500
// 再判断插件是否注册成功
set dm = createobject("dm.dmsoft")
ver = dm.Ver()
if ver <> need_ver then
// 这时,已经确认插件注册失败了。 弹出一些调试信息,以供分析.
messagebox "插件版本错误,当前使用的版本是:"&ver&",插件所在目录是:"&dm.GetBasePath()
messagebox "请关闭程序,重新打开本程序再尝试"
endscript
end if
end if
PutAttachment "F:\ASWD","*.txt"
dm_ret = dm.SetPath("F:\ASWD")
dm_ret = dm.SetDict(0,"ASD312.txt")
//下面这句是遍历符合窗口标题("记事本")的句柄保存到数组(HwndEx)里
hwnds = dm.EnumWindow(0,"xxxxxxxx","",1+4+8+16)
MsgBox "查找到符合的窗口句柄为:" & hwnds
fg_zf = Split(hwnds, ",")
zh_zf = UBound(fg_zf) + 1
TracePrint zh_zf
i=0
For zh_zf
hwnd = fg_zf(i)
TracePrint hwnd
hwnd = dm.FindWindowEx(hwnd, "Frame Tab", "")
hwnd = dm.FindWindowEx(hwnd, "TabWindowClass", "")
hwnd = dm.FindWindowEx(hwnd, "Shell DocObject View", "")
hwnd = dm.FindWindowEx(hwnd, "Internet Explorer_Server", "")
Call q
Call w
Delay 100
Call e
Delay 100
Call r
Delay 100
Call t
Delay 100
Call y
Delay 100
Call u
i=i+1
Next
//找字
Sub q
Delay 100
dm_ret = dm.BindWindow(hwnd,"gdi2","windows3","windows",0)
Delay 100
Do While true
dm_ret = dm.FindStr(0,0,2000,2000,"AWGG","000000-f0f0f0",1.0,intX,intY)
If intX >= 0 and intY >= 0 Then
dm.MoveTo intX + 261, intY + 6
Delay 50
dm.LeftClick
Delay 100
Exit Do
End If
Loop
Delay 100
End Sub
//随机字母和数字
Sub w
For 3
Rem aaaa
Randomize
VBS m = Int((99 * Rnd) + 1)
If m>64 and m<91
dm.KeyPress M
Else
Goto aaaa
End If
Next
//清空随机种子数
Randomize
x = Int((999999 * Rnd) + 1)
If x<100000 Then
End If
dm.SendString hwnd, x
End Sub
//随机字母
Sub e
dm.KeyDownChar "tab"
For 7
Rem aaaa
Randomize
VBS m = Int((99 * Rnd) + 1)
If m>64 and m<91
dm.KeyPress M
Else
Goto aaaa
End If
Next
End Sub
//找字
Sub r
Do While true
dm_ret = dm.FindStr(0,0,2000,2000,"XXX","000000-f0f0f0",1.0,intX,intY)
If intX >= 0 and intY >= 0 Then
dm.MoveTo intX + 65, intY + 6
Delay 50
dm.LeftClick
Delay 100
Exit Do
End If
Loop
End Sub
//后面还有,空间不够传不上了!这个源码是查找到所有窗口句柄后分割成单个句柄再进行单个窗口后台操作,第一个窗口进行操作完成了才轮到第二个,以此类推到最后一个。怎么改成让他查找到所有窗口的句柄后同时后台运行以下子线程!就是同时同步操作!
展开
 我来答
xq89911237
2013-03-10 · 超过37用户采纳过TA的回答
知道小有建树答主
回答量:77
采纳率:100%
帮助的人:78.6万
展开全部
修改内容:
1、 for zh_zf里的内容
2、增加一个子程序:sub 执行(囊括所有执行内容)

具体修改如下:
1、
For zh_zf
hwnd = fg_zf(i)
TracePrint hwnd
hwnd = dm.FindWindowEx(hwnd, "Frame Tab", "")
hwnd = dm.FindWindowEx(hwnd, "TabWindowClass", "")
hwnd = dm.FindWindowEx(hwnd, "Shell DocObject View", "")
hwnd = dm.FindWindowEx(hwnd, "Internet Explorer_Server", "")
线程ID=BeginThread(执行) //将该子程序内容用多线程来执行即可实现,同时多窗口操作了
delay 3000 //加上适当延时,防止多线程卡住
i=i+1
Next

2、
Sub 执行
Call q
Call w
Delay 100
Call e
Delay 100
Call r
Delay 100
Call t
Delay 100
Call y
Delay 100
Call u
End Sub
失落的水花
2013-03-08 · TA获得超过372个赞
知道小有建树答主
回答量:337
采纳率:0%
帮助的人:467万
展开全部
将调用函数改成启动多线程,即将call q及call w等等都改成BeginThread q及BeginThread w模式。这样才可以实现多线程同时运行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式