VBScript将重点放在IE中的一个窗口上

时间:2011-05-13 00:18:53

标签: internet-explorer vbscript setfocus wsh

我正在更新一段旧代码,它使用VBScript在IE中拉出一个窗口。出于某种原因,它喜欢在IE背后开放。谷歌给了我以下几行来设置VBScript窗口焦点:

set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.AppActivate("calculator")

然而,当我在IE中运行它时,我收到错误“Object required:'WScript'。”

在IE中有没有办法解决这个问题,或者其他方法呢?我已经打开并操作Word文档而没有任何问题。

编辑:为了澄清,我在< script type =“text / vbscript”>中运行它。浏览器(IE)中的标记,在我调用AppActivate之前,代码在第一行崩溃。

更新:我的安全设置非常低;所有ActiveX设置都处于启用状态(这是一个Intranet服务)。我测试了this问题的代码,计算器没有问题。事实上,我让AppActivate使用JavaScript,但它不能与VBScript一起使用。

使用JavaScript:

<script type="text/javascript">
    function calcToFrontJ(){
        wshShell = new ActiveXObject("WScript.Shell");
        wshShell.AppActivate("Calculator");
    }
</script>

不工作VBScript:

<script type="text/vbscript">
    Public Function calcToFrontV()
        'Set WScript = CreateObject("WScript.Shell") 'breaks with or without this line
        Set WshShell = WScript.CreateObject("WScript.Shell")
        WshShell.AppActivate("Calculator")
    End Function
</script>

我想我总是可以重构JavaScript,但我真的很想知道这个VBScript发生了什么。

最终答案:

<script type="text/vbscript">
    Public Function calcToFrontV()
        'must not use WScript when running within IE 
        Set WshShell = CreateObject("WScript.Shell")
        WshShell.AppActivate("Calculator")
    End Function
</script>

3 个答案:

答案 0 :(得分:2)

除非您使用以下方法自行创建,否则IE中不存在WScript对象:
Set WScript = CreateObject("WScript.Shell")
但如果安全设置不是很低的水平,它将无法工作。

编辑:保留Tmdean的评论,这是工作代码:

'CreateObject("WScript.Shell")
Set wshShell = CreateObject("WScript.Shell")
wshShell.AppActivate("calculator")

答案 1 :(得分:2)

Set objShell = WScript.CreateObject("WScript.Shell")
Set objIE = WScript.CreateObject("InternetExplorer.Application", "IE_")
objie.navigate "url"
objIE.Visible = 1
objShell.AppActivate objIE

'Above opens an ie object and navigates
'below runs through your proccesses and brings Internet Explorer to the top.

Set Processes = GetObject("winmgmts:").InstancesOf("Win32_Process")

intProcessId = ""
For Each Process In Processes
    If StrComp(Process.Name, "iexplore.exe", vbTextCompare) = 0 Then
        intProcessId = Process.ProcessId
        Exit For
    End If
Next

If Len(intProcessId) > 0 Then
    With CreateObject("WScript.Shell")
        .AppActivate intProcessId

    End With
End If

我今天在网上看了几个小时,然后拼凑了这段代码。它确实有效:D。

答案 2 :(得分:0)

诀窍是使用WScript.CreateObject()而不是普通CreateObject()来创建IE对象。

Set objShell = WScript.CreateObject("WScript.Shell")
Set objIE = WScript.CreateObject("InternetExplorer.Application", "IE_")
objIE.Visible = 1
objShell.AppActivate objIE

P.S。我在https://groups.google.com/forum/#!msg/microsoft.public.scripting.vbscript/SKWhisXB4wY/U8cwS3lflXAJ

得到了Dan Bernhardt的解决方案