本文介绍了AppActivate 并不总是激活应用程序窗口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我正在研究一些可以自动化 Internet Explorer 的 VBScript:打开它、导航并下载一个文件.我已经让它工作了,但是有一个问题在于我需要向它发送击键.SendKeys 对我有用,但问题是当我使用 AppActivate 将焦点设置在 IE 上时,它并不总是有效.基本上可以分为这两种情况:

So I'm working on some VBScript that will automate Internet Explorer: Open it, navigate, and download a file. I've got it working, however there's an issue that lies with the fact that I need to send keystrokes to it. SendKeys is working for me, but the problem is that when I use AppActivate to set focus on IE, it doesn't always work. Basically it can fall into these two cases:

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

Case 1: Double-click my .vbs file and the automation process goes smoothly. Window is activated and everything works fine.

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

Case 2: Double-click my .vbs file and some other app opens a window that steals focus (or manually click something else to change focus). When the AppActivate line is executed later on, IE never gets focused and the keystrokes obviously don't go through.

那么你们对 AppActivate 为什么没有设置焦点有什么想法吗?

So do you guys have any ideas on why AppActivate isn't setting focus?

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

Here's the code I'm using to activate the IE window:

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

推荐答案

这个运行 IE 并使用 AppActivate 焦点发送密钥的脚本示例

This script example of running IE and send keys with AppActivate focus

    '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

这篇关于AppActivate 并不总是激活应用程序窗口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-24 11:33