Board logo

标题: VBS如何让运行对象置顶? [打印本页]

作者: huzi525    时间: 2010-4-4 00:15     标题: VBS如何让运行对象置顶?

我想运行脚本的时候,就能让被激活的程序,出现在桌面最顶端。
请教各位达人,这应该如何实现呢?
查询网上资料有人说是通过AppActivate,激活后,立即Sendkeys 回车。
但是由于,在实际中我要运行的的URL是变化的,这也导致,浏览器标题没办法确定。
希望达人们能够教我,获取对象标题的办法,或者,能从别的思路出发,实现脚本一运行就自动浏览页面置顶。
先谢谢各位了!小弟初来乍到,不懂之处还望海涵。

  1. Dim ObjShell
  2. Set ObjShell = CreateObject("Wscript.Shell")
  3. ObjShell.Run "http://www.bathome.net/",1
  4. ObjShell.AppActivate("此处不知如何获取对象标题")
  5. ObjShell.Sendkeys "{enter}"
  6. Set ObjShell=Nothing
复制代码

作者: Spring    时间: 2010-4-4 02:05

在你提问之前有没有仔细检查过你的代码是不是只有无法确定标题的问题,
也就是说在你明确知道标题的情况下此代码是否能正常工作?

根据我的经验你 Run 之后系统默认就是把那个窗口弹到最顶端的,
你都不需要 Appactivate,
还有就是在 Run 之后马上 Appactivate 显然不行,
因为你的浏览器不可能那么快,
在输入网址之后瞬间就能知道网站的标题,不需要 sleep 延时一下吗?

我现在在网吧的机器上试了一下,如果在延时的那段时间里切到其他浏览器窗口的话,Appactivate 并不能强制把指定的窗口置顶,不知道你试过没有。
作者: huzi525    时间: 2010-4-4 10:14     标题: 回复 2楼 的帖子

您说的问题,我有试过。抱歉当时没注意把情况讲清楚。
的确,如果是没有开启浏览器的情况下,这个程序,不需要Appactivate也可以立即置顶显示。
我想处理的情况是,当浏览器本身是打开的但不是处于当前激活(非置顶状态),同时您的任务栏上还有很多其它的任务窗口的情形。此时运行批处理程序,如果不用Appactivate+Sendkeys "{enter}" 的话,只会在任务栏上闪闪,并不能让浏览器置顶显示。早上的时候,我想了个将就的办法,因为我的浏览器是糖果浏览器,显示不同的页面也不会改变这个最前端的标题。所以,对于我而言,这个标题是已知的。于是将上面代码需要输入标题的地方,换成"糖果浏览器"一切就OK了,也实现了我想要的效果。不过,这样子,程序就不具有通用性了。如果不能自动获取标题,我的其他设想就不能够实现了。比如,通过这个程序调用其它的非浏览器的程序,且希望它们置顶显示。又比如,当我需要更换一个默认浏览器时,或者是程序移植到别的机器上(被人拷贝)等等情况都显得不够灵活。 所以,希望大家能教我如何通过Shell获知对象标题。又或者其他办法能够窗口置顶。 另外中间Sleep自然是不可行的,当窗口焦点脱离了目标窗口,再Sendkey就没有意义了。这两句里,是先激活再回车的方式来实现窗口置顶的。所以必须紧连在一起。
…………
任务栏上一堆记事本,Matlab,QQ聊天窗口,酷狗播放器。。。相信大家有过类似的经历。 桌面上一大堆窗口,电脑慢慢的,而您想立即百度搜索一个东西的话,就得费上一两秒切换到浏览器,面对满屏呆滞的浏览器在它的小小搜索栏上输入您想要的东西。
我想做的就是一个,能在开始运行中直接搜索的程序,这样子,就不需要在第一时刻切换满桌面的东西。输入了您要的东西,运行后,就可以直接呈现给您想要的东西。节省了点点空白或呆滞页面的等待时间。

谢谢 Spring的交流~我们继续探讨。

[ 本帖最后由 huzi525 于 2010-4-4 10:26 编辑 ]
作者: Spring    时间: 2010-4-4 10:55

由于 Run 方法只返回命令执行是否成功的信息,因此无法通过它来获取更多的东西,
可以改用 Exec 方法,它返回一个运行的程序对象,可以不管程序的标题直接定位,
但是没有 Run 那样的运行参数,而且必须明确指定可执行程序,
最后我试了一下,不能置顶,还是只能在下面闪。。。
示例:
  1. Dim ObjShell, ObjExecuting
  2. Set ObjShell = CreateObject("Wscript.Shell")
  3. Set ObjExecuting = ObjShell.Exec("""C:\Program files\Internet Explorer\iexplore.exe"" http://www.bathome.net/")
  4. WScript.Sleep 300 '给程序启动留一点时间
  5. ObjShell.AppActivate ObjExecuting.ProcessID
  6. ObjShell.Sendkeys "{enter}"
复制代码

作者: caruko    时间: 2010-4-4 11:15

建议用autoit去写这个程序...
不超过5行代码就可以了
作者: huzi525    时间: 2010-4-4 15:00     标题: 回复 5楼 的帖子

谢谢,Caruko的建议。
VBS我也才刚接触不久,不太了解Autoit。
请问Autoit也是脚本语言吗,不用安装任何东西就可以运行么?
如果不是的话,我还是想先把纯脚本的东西弄懂再谈其它的。
作者: bat007    时间: 2010-4-4 18:53     标题: 回复 6楼 的帖子

AutoIt是脚本
脚本需要安装一个东西才能运行
不过它编译成exe文件之后就可以随便运行了




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2