【问题标题】:How to minimize window?如何最小化窗口?
【发布时间】:2017-02-25 07:50:34
【问题描述】:

如何最小化窗口?

我正在制作 HTA 应用程序,我想用我的自定义标题栏替换窗口标题栏。 我已经通过 HTA 的“caption=no”选项禁用了它,并放置了我自己的最小化/最大化/关闭按钮。

我找到了两种最小化窗口的方法:

  • 快捷键 ALT + SPACE + n
  • 快捷键 WinKey + ArrowDown

所以我可以使用 WScript.Shell 的 SendKeys 方法将此快捷方式发送到窗口。

WsShell = new ActiveXObject("WScript.Shell")
WsShell.SendKeys("% n")

但是第一个不能用,因为没有标题栏,第二个是因为 WinKey 不支持 SendKeys。

我找到了 Shell.Application 的 MinimizeAll() 方法,但它是单独的。

还有其他方法可以最小化窗口吗?可能是另一个 activeX 对象或快捷方式?

【问题讨论】:

    标签: hta windows-shell wsh windows-scripting


    【解决方案1】:

    我想出了完全相同的问题。这是对我有用的解决方案:

    放在head>部分:

    <object id="HHCtrlMinimizeWindowObject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
        <param name="command" value="minimize" />
    </object>
    
    <script type="text/javascript">
    function _jsMinWin( ) {
        try {
            HHCtrlMinimizeWindowObject.Click( );
        }
        catch ( err ) {
            alert( err.message );
        }
    }
    </script>
    

    然后在 body> 部分类似:

    <input type="button" value="Minimize Window" name="MinimizeWindow" id="MinimizeWindow" onclick="javascript:_jsMinWin();" />
    

    【讨论】:

      【解决方案2】:

      好吧,您可以使用 Microsoft Word 应用程序对象的 Tasks 属性。首先通过将 ProgID "Word.Application" 传递给 new ActiveXObject 命令来实例化 Microsoft Word 应用程序对象:

      var word = new ActiveXObject("Word.Application");
      

      然后,在 Tasks 集合中找到您的 HTA 窗口:

      var win = word.Tasks.Item(document.title);
      

      如您所见,您应该将 HTA 的标题传递给 Item 方法以查找 HTA 的窗口。但是有一个问题......如果另一个不需要的窗口与您的 HTA 具有相同的标题怎么办?这会导致窗口混乱。要解决此问题,我建议您在任务集合中找到您的 HTA 窗口之前,为您的 HTA 设置一个特殊且唯一的标题。这使事情变得复杂:

      document.title = "window" + Math.random();
      win = word.Tasks.Item(document.title);
      document.title = "My HTA";
      

      请注意,您应该在找到您的 HTA 窗口后设置您自己想要的标题。另请注意,此代码应在window.onload 事件发生时运行。因为那是您的 HTA 生成其窗口的时候。

      然后,当您需要最小化 HTA 窗口时,将 win 对象的 WindowState 属性设置为 2

      win.WindowState = 2;
      

      编辑:另一方面,这种方式有两个缺点:
      1. 只要用户的电脑上安装了Microsoft Office Word,它就可以正常运行。
      2. 实例化 Microsoft Word 应用程序对象需要几秒钟,因为该对象在进程外服务器中运行。所以这可能会减慢您的 HTA。

      【讨论】:

      • 这似乎是解决问题的一种不必要的愚蠢方式。除其他问题外,如果用户没有安装 Microsoft Word,它将失败。
      • @duskwuff 是的,不幸的是。但这是我想到的唯一方法。对不起。你建议我删除我的答案吗?
      【解决方案3】:

      如果Microsoft scripting guy 不知道该怎么做,那可能是不可能的。

      即使您可以一直使用 ActiveXObject("shell.application").Windows.Item(x) 并获得自己的 InternetExplorer 对象,似乎也没有办法以编程方式最小化您自己。

      我唯一的建议是在每个与窗口相关的对象上使用 for (var k in obj) WScript.Echo(k) 之类的东西,你可以得到你的手并寻找未记录的方法/属性...

      【讨论】:

        猜你喜欢
        • 2020-10-01
        • 2021-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-21
        • 2011-05-27
        • 1970-01-01
        相关资源
        最近更新 更多