永发信息网

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

答案:2  悬赏:40  手机版
解决时间 2021-02-22 23:35
  • 提问者网友:火车头
  • 2021-02-21 23:37
// 首先打包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
//后面还有,空间不够传不上了!这个源码是查找到所有窗口句柄后分割成单个句柄再进行单个窗口后台操作,第一个窗口进行操作完成了才轮到第二个,以此类推到最后一个。怎么改成让他查找到所有窗口的句柄后同时后台运行以下子线程!就是同时同步操作!
最佳答案
  • 五星知识达人网友:拜訪者
  • 2021-02-21 23:51
修改内容:
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
全部回答
  • 1楼网友:长青诗
  • 2021-02-22 00:09
aa = waitkey() hwnd = plugin.window.mousepoint() bb = waitkey() hwnd2 = plugin.window.mousepoint() while true call plugin.bkgnd.keypress(hwnd, 65) call plugin.bkgnd.keypress(hwnd2, 65) wend endscript 分别获取2个窗口的句柄。后台操作。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯