标题: [问题求助] [已解决]vbs如何点击弹出框上的指定按钮? [打印本页]
作者: ygqiang 时间: 2016-4-23 19:29 标题: [已解决]vbs如何点击弹出框上的指定按钮?
[已解决]vbs如何实现:点击弹出框/提示框上的指定按钮?
vbs循环监控特定标题的窗口,如果弹出来窗口,就点击窗口上的指定按钮
——————————————————————————————————
更新下:
经过反复测试:
1、某个exe软件运行的时候,有时候会弹出某个特定标题的窗口。
默认是取消框。如果先按1次键盘的左箭头/TAB按键,再按1次键盘的回车/空格键,
都可以达到预期效果(都可以选中确定按钮,然后让窗口关闭)。
2、vbs代码,无论如何修改,都不能实现选中确定按钮、并点击确定让窗口关闭。
每次都只能点击到“取消”按钮。
多谢Nsqs的帮忙。
sendkeys的方法是模拟键盘,如果窗口内的按钮不支持快捷键,sendkeys就不能用了
扩展第三方程序,可以调用里面的方法向系统直接发送消息,
按下窗口里面的按钮。用sendmessage是向系统发送系统指令
系统接收什么就执行什么 非模拟键盘操作。。- Const strWindowTitle = "窗口标题" ' 监控的窗口标题
-
- Do
- Main
- WScript.Sleep 2000
- Loop
-
- Sub Main()
-
- Dim wso, fso
- Set wso = CreateObject("Wscript.Shell")
- Set fso=CreateObject("Scripting.FileSystemObject")
-
- '一直检查窗口,直到指定窗口出现
- Do While wso.AppActivate(strWindowTitle) = False
- WScript.sleep 1000 ' 延时 1 秒
-
- Loop
-
- '激活窗口
- Call WindowActive(strWindowTitle)
- WScript.sleep 1000 ' 延时 1 秒
-
- '(发送 left左箭头)
- wso.SendKeys "{left}"
-
- WScript.sleep 1000 ' 延时 1 秒
- '(发送 回车)
- wso.sendkeys "{enter}"
-
- Set wso = NoThing
-
- End Sub
-
-
-
- '激活窗口
- Sub WindowActive(ByVal strWindowTitle)
- Dim objWord, objTasks
- Set objWord = CreateObject("word.Application")
- Set objTasks = objWord.Tasks
- If objTasks.Exists(strWindowTitle) Then
- objTasks(strWindowTitle).Activate '激活窗口
- objTasks(strWindowTitle).WindowState = 0 '0平常模式、1最大化模式、2最小化模式
- End If
- objWord.Quit
- End Sub
复制代码
作者: CrLf 时间: 2016-4-23 20:07
用 ahk 吧
作者: codegay 时间: 2016-4-23 21:11
回复 2# CrLf
cn-dos上我存着他当年问我问题的私信。
作者: codegay 时间: 2016-4-23 21:13
试试发送TAB切换焦点。
作者: ygqiang 时间: 2016-4-23 21:44
回复 4# codegay
用键盘,就只能是1次左箭头+1次回车,才能满足要求。。
tab键好像没效果。
作者: Nsqs 时间: 2016-4-24 02:44
- sub click(win,subwin,s,c)
- dim BM_CLICK,h,api,hwnd,save_win,bh
- set api=CreateObject("VBScript.API")
- with api
- h=.FindWindow (vbNullString,win):BM_CLICK=&HF5
- save_win=.GetForegroundWindow
- for each Hwnd in .EnumSubHwnd(h,"*button*",subwin):bh=hwnd:next
- do
- if .isWindow(bh)=0 then _
- exit do
- if .GetForegroundWindow<>bh then _
- .SetForegroundWindow h
- count=count+1
- .sendmessage bh,BM_CLICK ,0,0
- wsh.sleep int(s&"E+3")
- loop while count<c
- .SetForegroundWindow save_win
- end with
- set api=nothing
- end sub
-
- call click("window","确定",1,1000) '调用过程click 1秒执行一次,持续1000次
复制代码
作者: Nsqs 时间: 2016-4-24 10:10
本帖最后由 Nsqs 于 2016-4-24 13:50 编辑
回复 7# ygqiang
更新了一下,优化了方法,直接调用click就可以循环了
作者: ygqiang 时间: 2016-4-24 20:40
回复 8# Nsqs
1、VBScript.exe,双击注册。是否适合xp系统下使用?
2、代码直接保存为vbs运行吗?
3、能否修改下代码,实现一直循环2-3秒监控?
作者: Nsqs 时间: 2016-4-24 21:54
回复 8# ygqiang
1是的
2是的
3自己改…我都写了注释
作者: ygqiang 时间: 2016-4-25 10:18
回复 9# Nsqs
——————————————————————————————————
更新下:
经过反复测试:
1、特定标题的窗口弹出来,默认是取消框。如果先按1次键盘的左箭头/TAB按键,再按1次键盘的回车/空格键,
都可以达到预期效果(都可以选中确定按钮,然后让窗口关闭)。
2、vbs代码,无论如何修改,都不能实现选中确定按钮、并点击确定让窗口关闭。
每次都只能点击到“取消”按钮。
作者: ygqiang 时间: 2016-4-25 10:19
回复 9# Nsqs
xp系统下,你的6楼最新的代码,出现错误提示。
作者: Nsqs 时间: 2016-4-25 13:04
你没有下载最新的exe?
作者: ygqiang 时间: 2016-4-25 13:16
回复 12# Nsqs
哦。没下载。回头下载最新exe再测试下。谢谢
作者: Nsqs 时间: 2016-4-25 13:25
回复 Nsqs
哦。没下载。回头下载最新exe再测试下。谢谢
ygqiang 发表于 2016-4-25 13:16
如果是已经有旧exe并且你注册过了你就不需要再注册一次直接替换旧exe就可以了.如果没注册过就把新exe替换以后再双击打开注册就能用最新代码了
作者: ygqiang 时间: 2016-4-25 14:56
回复 14# Nsqs
替换旧exe?
exe文件存放在系统哪个目录下?
作者: ygqiang 时间: 2016-4-25 14:57
回复 12# Nsqs
一直用的是:你提供的最开始的旧版本exe。最新的没下载。
作者: Nsqs 时间: 2016-4-25 20:45
本帖最后由 Nsqs 于 2016-4-25 20:52 编辑
回复 15# ygqiang
随便,双击注册就可以用了,注册后整个系统都可以用
当然这只是扩展功能,可以强化vbs 你卸载不卸载都可以,卸载的话可以输入/unregserver 或者在控制面板 - 更新与卸载 选择你要卸载的程序
我后来更新了代码功能,和exe的功能,如果你用新代码就必须下载最新的exe,上面帖子我更新过了的
作者: Nsqs 时间: 2016-4-25 20:57
回复 15# ygqiang
如果最新代码还是不能用就在运行里把exe 重新注销再注册一遍就可以了
注销命令是VBScript.exe /unregserver,之后双击一次新exe即可
作者: ygqiang 时间: 2016-4-25 21:06
回复 18# Nsqs
多谢。下载了你的最新exe,以及最新vbs代码。
刚开始测试了几次都好用。后来再运行vbs代码,就有错误提示窗口。不能用了。
作者: Nsqs 时间: 2016-4-25 21:26
回复 19# ygqiang
什么错误?
作者: ygqiang 时间: 2016-4-25 22:04
回复 20# Nsqs
类似11楼
第4行的
作者: Nsqs 时间: 2016-4-25 22:44
回复 21# ygqiang
这种错误应该是你没有用新的exe吧,试着卸载旧exe就可以了
作者: ygqiang 时间: 2016-4-26 12:36
VBScript注销.bat- VBScript.exe /unregserver
复制代码
kill-vbs.bat- taskkill /f /im "wscript.exe"
复制代码
附件是最新VBScript.exe
作者: panda6661 时间: 2019-8-26 09:53
非常有用,多谢答主,我的更简单些,直接点回车就ok了
作者: panda6661 时间: 2019-8-26 22:49
但是在远程计算机上好像不起作用了,长时间不操作计算机就无效了
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |