Вывести окно проверки орфографии на передний план с помощью JavaScript / JScript в Windows 7 - PullRequest
2 голосов
/ 03 июня 2011

У меня есть некоторый код JScript (преобразованный из какого-то старого VBScript), который начинается так:

var Word = new ActiveXObject("Word.Basic");

Word.FileNew(); // opens new Word document
Word.Insert(IncorrectText);
Word.ToolsSpelling(); // opens spell check behind IE

Идея состоит в том, чтобы использовать проверку орфографии MS Word для использования в браузере, и она хорошо работает в XP, но в Windows 7 / IE 8 открывается флажок проверки орфографии ( этот вопрос говорит мне что проблема началась в Vista и, вероятно, связана с ОС, а не с браузером или с Office).

Итак, мой вопрос, как я могу вывести это окно на передний план? Важно отметить, что последняя строка, Word.ToolsSpelling();, блокирует мой скрипт, поэтому все, что я делаю, должно быть до этого.

Я пробовал

var wshShell = new ActiveXObject("WScript.Shell");
wshShell.AppActivate("Document1 - Microsoft Word"); // or some other text

до вызова ToolsSpelling, но это ничего не делает (может быть, потому что документ Word на самом деле не раскрывается в этот момент?). Конечно, это будет работать только в том случае, если «Document1» уже не открыт, так что это сомнительная мысль для начала.

За этот ответ , я пытался использовать window.blur(); для размытия IE, но это будет работать, только если открыто только окно IE. Может быть, есть какой-нибудь способ, которым я могу перебрать все открытые окна и применить это?

SetForegroundWindow выглядело многообещающе, но я не знаю, как использовать его в JSript.

Есть идеи?

Примечание: разрешения браузера будут полностью открыты для этого сайта.

Обновление : Оказывается, если вы используете Word.Application, проверка орфографии появляется впереди, как и должно быть. Только метод Word.Basic имеет эту проблему (я не ожидаю знать, почему эта сторона вечности):

var wordApp = new ActiveXObject("Word.Application");
wordApp.Documents.Add();
wordDoc = wordApp.ActiveDocument;
... // safety checks before insertion
wordSelection.TypeText(IncorrectText);
wordDoc.CheckSpelling();
wordApp.Visible = false; // CheckSpelling makes the document visible

1 Ответ

2 голосов
/ 09 июня 2011

Возможно, вы сможете изменить состояние окна. Когда окно развернуто после его сворачивания, Windows будет складывать его впереди (zIndex наверх).

Что-то вроде:

 var WIN_MAX = 2;
 var WIN_MIN = 1;

 var Word = new ActiveXObject("Word.Application");
 Word.Visible = true;
 // minimize the app
 Word.WindowState = WIN_MIN ;
 // in 500ms, maximize
 setTimeout(function () {
     Word.WindowState = WIN_MAX;
 }, 500);

Вызов setTimeout пытается обойти проблему синхронизации; Windows иногда «запутывается», когда программное свертывание / свертывание происходит сразу же. Возможно, вам придется немного увеличить эту задержку, протестировать ее несколько раз и посмотреть, какие результаты вы получите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...