Board logo

标题: [问题求助] VBS获得焦点问题请教 (倒计时关机程序) [打印本页]

作者: 9zhmke    时间: 2013-11-30 13:56     标题: VBS获得焦点问题请教 (倒计时关机程序)

本帖最后由 9zhmke 于 2013-12-2 16:41 编辑

前几天刚好有空,写了段倒计时关机的vbs,原理是创建html并显示出来,实现每秒倒计时并关机的功能。
但这个脚本现在遇到的问题是:
刚弹出的窗口时怎样才能使这个刚生成的html窗口获得焦点? 并使焦点自动聚焦在输入框?

附上程序段:
  1. Dim WshShell,ip,Net_test,addr,str,i,count,speed
  2. Set WshShell=createobject("wscript.shell")
  3. Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
  4. set ie=wscript.createobject("internetexplorer.application","event_") '创建ie对象'
  5. ie.fullscreen=0 '不使用全屏
  6. ie.menubar=0 '取消菜单栏'
  7. ie.addressbar=0 '取消地址栏'
  8. ie.toolbar=0 '取消工具栏'
  9. ie.statusbar=0 '取消状态栏'
  10. ie.width=450 '宽'
  11. ie.height=280 '高'
  12. ie.resizable=0 '不允许用户改变窗口大小'
  13. ie.navigate "about:blank" '打开空白页面'
  14. 'ie.left=fix(ie.document.parentwindow.screen.availwidth-ie.width/2) '水平居中'
  15. ie.top=10
  16. ie.visible=0
  17. ie.visible=1 '窗口可见'
  18. with ie.document '以下调用document.write方法,'
  19.     .write "<html><head><title>简易自定义关机程序</title></head><body bgcolor=#dddddd scroll=no>"
  20.     .write "<br><font size=5><center><font face=黑体>九洲系统优化系列 </font></center><br></font>"
  21.     .write string(6," ") & "功能建议和信息反馈请点击:<a href=http://bbs.dp168.com/thread-88488-1-1.html   target=_blank>东坡论坛"
  22.     .write "</a></font></p><br>  请输入多久后关机:"
  23.     .write "<input id=time_in type=text size=5 name=time_in onkeydown="& chr(34) & "if(event.keyCode==13) document.all.confirm.focus();" & chr(34) & ">"
  24.     .write " 还剩下:<label id=time_echo type=text size=5 name=time_echo>"
  25.     .write "</label><br><br><p align=right><label id=time_demo type=text size=5 name=time_demo> </label>"
  26.     .write "<input id=cancel type=button value=退出> <input id=confirm type=button value=确定 onclick=confirm>"
  27.     .write "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<p></font></body></html>"
  28.     .write "<!-- document.all.time_in.focus(); --> "
  29. end with
  30. dim wmi '显式定义一个全局变量'
  31. set wnd=ie.document.parentwindow '设置wnd为窗口对象'
  32. set id=ie.document.all '设置id为document中全部对象的集合'
  33. id.confirm.onclick=getref("confirm") '设置点击"确定"按钮时的处理函数'
  34. id.cancel.onclick=getref("cancel") '设置点击"取消"按钮时的处理函数'
  35. tmp_mi=0
  36. tmp=0
  37. tmp_sec=0
  38. wscript.sleep 200
  39. if  WshShell.AppActivate("http:/// - 简易自定义关机程序 - Windows Internet Explorer")  then  WshShell.SendKeys "{ENTER}"   '好象是找到了,但无法激活。
  40. do while true '由于ie对象支持事件,所以相应的,'
  41.   wscript.sleep 1000 '脚本以无限循环来等待各种事件。'
  42.   'msgbox  "H" & IE.document.GetElementById("time_echo").innerHTML & "H"
  43.   if tmp_mi>=0 and tmp_sec>0 then
  44.       tmp_sec=tmp_sec-1
  45.       if tmp_sec<1 then
  46.           tmp_sec=60
  47.           tmp_mi=tmp_mi-1
  48.       end if
  49.       tmp_h=int(tmp_mi/60):if tmp_h>0 then tmp_h=tmp_h & "小时" & tmp_mi-tmp_h*60 else tmp_h=tmp_mi
  50.       if tmp_mi>-1 then IE.document.GetElementById("time_echo").innerHTML=tmp_h & ":" & tmp_sec
  51.   end if
  52.   if tmp_mi<0 and tmp_sec=60 then Shutdown()
  53. loop
  54. sub event_onquit 'ie退出事件处理过程'
  55.   wscript.quit '当ie退出时,脚本也退出'
  56. end sub
  57. sub cancel '"取消"事件处理过程'
  58.   ie.quit '调用ie的quit方法,关闭IE窗口'
  59. end sub '随后会触发event_onquit,于是脚本也退出了'
  60. sub confirm '"确定"事件处理过程,这是关键'
  61.   with id
  62.       tmp=.time_in.value
  63.       if tmp>"" then tmp=Num(tmp)
  64.       if instr(tmp,":") then tmp_left=left(tmp,instr(tmp,":")-1):tmp_right=right(tmp,len(tmp)-instr(tmp,":")):tmp=tmp_left*60+tmp_right
  65.       if isnumeric(tmp) then if tmp<1 then tmp=""
  66.       if isnumeric(tmp)=false then  tmp=""   
  67.       if tmp="" then
  68.           IE.document.GetElementById("time_demo").innerHTML= "<font color=red>请输入正确的分钟数!</font>"
  69.           tmp=0
  70.           .time_in.value="" '空值则默认
  71.       else
  72.           tmp_mi=tmp-1:tmp_sec=60
  73.           IE.document.GetElementById("time_demo").innerHTML= ""
  74.       end if
  75.   end with
  76. end sub
  77. '===========================================================================================
  78. Function Shutdown() '关机
  79.     Set colOperatingSystems = GetObject("winmgmts:{(Shutdown)}").ExecQuery("Select * from Win32_OperatingSystem")
  80.     For Each objOperatingSystem in colOperatingSystems
  81.         ObjOperatingSystem.Win32Shutdown(8)
  82.     Next
  83. End Function
  84. Function Num(i) '转换中文
  85.     k=""
  86.     for j=1 to len(i)
  87.         l=mid(i,j,1)
  88.         if l="1" then l="1"
  89.         if l="2" then l="2"
  90.         if l="3" then l="3"
  91.         if l="4" then l="4"
  92.         if l="5" then l="5"
  93.         if l="6" then l="6"
  94.         if l="7" then l="7"
  95.         if l="8" then l="8"
  96.         if l="9" then l="9"
  97.         if l="0" then l="0"
  98.         if l=":" then l=":"
  99.         k=k & l
  100.     next
  101.     Num=k
  102. End Function
复制代码

作者: wankoilz    时间: 2013-12-2 18:55

自己查下shell.appactivate的用法,这个可以通过窗口名称获取焦点
作者: 9zhmke    时间: 2013-12-3 08:50

自己查下shell.appactivate的用法,这个可以通过窗口名称获取焦点
wankoilz 发表于 2013-12-2 18:55



    很显然我是知道有个百度的,我要把脚本写成这样也必须要查很多、试很多才行。 所提问题是我实在找不到办法解决了才提出的。

测试环境是Win7x86/IE9。




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