AppActivate并不总是激活应用程序窗口

时间:2016-08-03 16:41:19

标签: internet-explorer vbscript automation focus

所以我正在开发一些可以自动化Internet Explorer的VBScript:打开它,导航和下载文件。我已经开始工作,但问题在于我需要向它发送击键。 SendKeys正在为我工​​作,但问题在于,当我使用AppActivate来关注IE时,它并不总是有效。基本上它可以归结为这两种情况:

案例1 :双击我的.vbs文件,自动化流程顺利进行。窗口被激活,一切正常。

案例2 :双击我的.vbs文件,其他一些应用程序会打开一个窃取焦点的窗口(或手动点击其他内容来更改焦点)。当AppActivate行稍后执行时,IE永远不会集中注意力,键击显然不会通过。

那么你们对AppActivate没有设定焦点的原因有任何想法吗?

这是我用来激活IE窗口的代码:

Do While Not wshell.AppActivate("Active Agents - Internet Explorer")
    WScript.Sleep(1)
Loop

1 个答案:

答案 0 :(得分:2)

此脚本示例运行IE,并以AppActivate为焦点发送密钥

    'fuction to set the application active and then send keys 
    Function mySendKey(sKey,sTime)
       for i=0 to 600        ' this loop will continue about 30 sec if this not enough increase this number
        'get the window title of the IE
        title= sh.Exec("cmd.exe /c tasklist /v /fi ""imagename EQ iexplore*"" /FO LIST | FIND /i ""window title:"" ").stdOut.readline
        title= Mid (title,15,len(title)-14)
        sh.Popup  title,1

        Sh.AppActivate title
        Rtn=Sh.AppActivate(title)     '  window title of application
        If Rtn = True  Then           'if the window active then execute sned keys
            Sh.SendKeys  sKey                                     
            Exit For 
        End If
        wscript.sleep 10                              
      Next
     WScript.Sleep sTime*1000
    End Function

  'hide the cmd window from popup 
  If StrComp(right(WScript.FullName,11),"wscript.exe",1) = 0 Then    
  WScript.Quit CreateObject("WScript.Shell").Run("cscript.exe //nologo """ & WScript.ScriptFullName & """", 0, False)
  End If 
  'open internet explorer   
Set Sh = CreateObject("WScript.Shell")
Sh.Exec "C:\Program Files\Internet Explorer\iexplore.exe"
WScript.Sleep 7000
 'call mySendKey function to send keys to IE  
 Call mySendKey("(% )(x)",1)                         'max the windows of IE
 Call mySendKey("({F6})(www.yahoo.com)    (~)",10)   'browse to yahoo and wait 10 sec to load
 Call mySendKey("({F6})(www.msn.com)      (~)",10)   'browse to msn and wait 10 sec to load 
 Call mySendKey("(% )(C)",1)                         'close the IE