VBScript установил фокус на окне в IE - PullRequest
5 голосов
/ 13 мая 2011

Я обновляю старый кусок кода, который использует VBScript, чтобы открыть окно в IE. По какой-то причине ему нравится открываться за IE. Google дал мне следующую пару строк для настройки фокуса окна в VBScript:

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

Однако, когда я запускаю это в IE, я получаю ошибку «Требуется объект:« WScript ».»

Есть ли способ обойти это в IE или другой способ сделать это? Я уже без проблем открываю и манипулирую документом Word.

Редактировать: чтобы уточнить, я запускаю это в теге в браузере (IE), и код падает на первой строке, прежде чем я даже вызываю AppActivate.

Обновление : мои настройки безопасности довольно низкие; все настройки ActiveX включены (это услуга интрасети). Я проверил код из этого вопроса, и калькулятор открылся без проблем. На самом деле я получил 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 ]

2 голосов
/ 06 марта 2015
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 голосов
/ 15 мая 2011

Объект WScript не существует в IE, если вы не создадите его самостоятельно с помощью:
Set WScript = CreateObject("WScript.Shell")
Но это не сработает, если настройки безопасности не находятся на достаточно низком уровне.

Редактировать: Факторинг в комментарии Tmdean, это рабочий код:

'CreateObject("WScript.Shell")
Set wshShell = CreateObject("WScript.Shell")
wshShell.AppActivate("calculator")
0 голосов
/ 02 апреля 2015

Хитрость заключается в использовании WScript.CreateObject() вместо простого CreateObject() для создания объекта IE.

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

PS Я получил решение от Дэна Бернхардта по адресу https://groups.google.com/forum/#!msg/microsoft.public.scripting.vbscript/SKWhisXB4wY/U8cwS3lflXAJ

...