【问题标题】:Bring spell check window to foreground with JavaScript/JScript in Windows 7在 Windows 7 中使用 JavaScript/JScript 将拼写检查窗口置于前台
【发布时间】:2011-06-15 01:49:08
【问题描述】:

我有一些 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 的后台打开(this question 告诉我问题开始于Vista,可能是操作系统问题,而不是浏览器或 Office 问题)。

所以我的问题是,我怎样才能把这个窗口带到前台?一个重要的注意事项是最后一行 Word.ToolsSpelling(); 锁定了我的脚本,所以我所做的任何事情都需要在那之前。

我试过了

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

在 ToolsSpelling 调用之前,但这并没有做任何事情(可能是因为此时 Word 文档实际上并未显示?)。当然,这只有在没有打开“Document1”时才有效,所以这是一个值得怀疑的想法。

根据this answer,我尝试使用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

【问题讨论】:

    标签: javascript ms-word activex office-interop


    【解决方案1】:

    您也许可以调整窗口状态。当窗口在最小化后最大化时,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 有时会“感到困惑”。您可能需要稍微延长延迟时间,反复测试,看看会得到什么样的结果。

    【讨论】:

    • 我收到Word.Visible = true; 的“对象不支持此属性或方法”错误。与Word.WindowState = WIN_MIN 相同。也许这些函数对 Word.Basic 无效?
    • 您可以尝试将Word.Application 作为 ActiveXObject 吗?告诉我。
    • var Word = new ActiveXObject("Word.Application"); 确实有效,但它使其他调用无效。我认为Word.FileNew() 的替代品是Word.Documents.Add(),但我在选择时遇到了问题。如果您或某人已经知道如何使用此 API,那将很有帮助。否则我会在周末之后去取。
    • 嗯,将所有内容更改为使用Word.Application 基本上解决了问题并给了我想要的行为,哈哈。但是,Word.Visible 在拼写检查后隐藏文档(这使得文档在完成后可见)非常有用。
    猜你喜欢
    • 2015-05-22
    • 2021-06-01
    • 2012-10-21
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 2020-05-29
    • 2011-02-13
    • 1970-01-01
    相关资源
    最近更新 更多