问题描述
所以我正在研究一些可以自动化 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 并不总是激活应用程序窗口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!