WSH Jscript AppActivate() и Sleep()

#jscript

#jscript

Вопрос:

Я пытаюсь изучить JScript (не javascript), но у меня чертовски много времени на поиск ресурсов. Что я хочу сделать, так это манипулировать оболочкой Windows для создания программы, которая управляет другими программами, поэтому мне особенно нужно иметь возможность использовать функцию AppActivate() Jscript для переключения фокуса между окнами, однако это не работает. Я предполагаю, что это не работает, потому что вызовы AppActivate выполняются до полной загрузки Windows, которую я пытаюсь манипулировать?

Не мог бы кто-нибудь, пожалуйста:

Дайте мне рабочий пример переключения между, скажем, калькулятором и блокнотом, также дайте мне хороший справочный материал?

Кроме того, как мне приостановить программу в конце выполнения, чтобы я мог прочитать ошибки в командной строке?

Это то, что я написал, и каждый раз происходит сбой.

     import System;
import System.Drawing;
import System.Windows.Forms;
import Accessibility;


//Open calculator, wait 3 seconds, open notepad, wait three seconds, change focus to calculator.
var WshShell = new ActiveXObject("WScript.Shell");
WshShell.Run("calc");
WshShell.Sleep(3000);
WshShell.Run("c:/windows/system32/notepad.exe");
WshShell.Sleep(3000);
AppActivate("calc");
 

Комментарии:

1. Вот еще несколько ресурсов: limm.mgimo.ru/doc/jscript/htm/jstutor.htm , petergottlieb.com/docs/spect/DOASIS/jscript_tutorial.pdf

Ответ №1:

Первые строки вашего скрипта (импорт …) не являются WSH JScript. Удалите их. WScript.Объект оболочки не имеет метода .Sleep . Этот метод предоставляется (глобальным) объектом WScript. Для использования .Для AppActivate необходимо указать WScript.Объект оболочки.

Рабочий код:

 var WshShell = new ActiveXObject("WScript.Shell");
WshShell.Run("calc");
WScript.Sleep(3000);
WshShell.Run("c:/windows/system32/notepad.exe");
WScript.Sleep(3000);
WshShell.AppActivate("calc");
 

Чтобы увидеть, что происходит, запустите свой скрипт с консоли («окно DOS»).

Начните читать здесь.

Обновить комментарии wrt:

WSH JScript нет.ЧИСТЫЙ JScript. «Перенос» вышеупомянутого скрипта в .NET выглядит следующим образом:

 import System;

var WshShell = new ActiveXObject("WScript.Shell");
WshShell.Run("calc");
System.Threading.Thread.Sleep(3000);
WshShell.Run("c:/windows/system32/notepad.exe");
System.Threading.Thread.Sleep(3000);
WshShell.AppActivate("calc");
System.Threading.Thread.Sleep(3000);
WshShell.AppActivate("notepad");
 

Как вы можете видеть, вам нужно использовать функцию sleep платформы (WSH против .NET).

Комментарии:

1. Хорошо, это откроет экземпляр calculator, но как только он столкнется с Sleep(), моя программа вылетает. Что дает?

2. Сообщение об ошибке: «[program name].exe» перестал работать, проверяя решения», а затем «Проблема привела к тому, что программа перестала работать правильно. Windows закроет программу и уведомит вас, доступно ли решение »

3. @user3764918 — это похоже на проблему «[имя программы] .exe». Можете ли вы запустить его без скрипта .js? Вы тестировали скрипт с calc/notepad.exe ?

4. Необработанное исключение: Microsoft. Jscript. JScript. Исключение JscriptException: функция, ожидаемая в Microsoft. Jscript. Поздняя привязка. Вызовcomobject(IReflect ir, имя строки, Objectct ob, связующее, аргументы Object[], параметрмодификатор[] …» , Да, я уже пробовал это с окнами, открытыми вручную. Он особенно ненавидит функцию Sleep(), потому что код выполняется до первого вызова Sleep()

5. @user3764918 — вы не используете WSH JScript, но . ЧИСТЫЙ JScript.