You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让HTA窗口根据内容自动调整大小?

解决HTA窗口根据内容自动调整大小的问题

我明白你想做一个自适应内容的错误提示HTA,之前用auto参数没成功是因为VBScript的ResizeTo并不支持这个关键字——它需要具体的数值。咱们一步步来搞定这个需求:

首先,修正HTML结构问题

你原来的代码把内容<div>放到了<head>标签里,这不符合HTML规范,得把所有可见内容移到<body>里,这样浏览器才能正确渲染和计算尺寸。

用CSS实现稳定的左右布局

用Flex布局来实现左图右文,这样内容的宽高能被正确计算,避免浮动布局可能带来的尺寸计算偏差:

.container {
  display: flex;
  align-items: center;
  gap: 20px; /* 图片和文字之间的间距 */
  padding: 15px; /* 内容和窗口边缘的间距 */
}
.text-content {
  text-align: center;
}

编写VBScript计算并调整窗口大小

要获取容器的实际宽高,然后加上HTA窗口边框和标题栏的额外尺寸(不同系统可能略有差异,这里给个通用补偿值),再居中窗口:

Sub window_onload()
    Dim container, totalWidth, totalHeight
    Set container = document.getElementById("content-container")
    
    ' 获取容器的实际宽高
    totalWidth = container.offsetWidth
    totalHeight = container.offsetHeight
    
    ' 补偿窗口边框和标题栏的尺寸
    totalWidth = totalWidth + 10 ' 左右边框各5px左右
    totalHeight = totalHeight + 30 ' 标题栏+上下边框
    
    ' 调整窗口大小并居中
    self.ResizeTo totalWidth, totalHeight
    self.MoveTo (screen.Width - totalWidth)/2, (screen.Height - totalHeight)/2
End Sub

完整的HTA代码

把这些整合起来,最终代码如下:

<html>
<head>
    <title>BINDATA FILE ERROR</title>
    <HTA:APPLICATION 
        ID="ERROR" 
        APPLICATIONNAME="ERROR" 
        SysMenu="NO" 
        MAXIMIZEBUTTON="NO" 
        MINIMIZEBUTTON="NO" 
        EXITBUTTON="NO" 
        SCROLL="NO" 
        BORDER="DIALOG" 
        ICON="ekis.ico" 
    />
    <style>
        .container {
            display: flex;
            align-items: center;
            gap: 20px;
            padding: 15px;
        }
        .text-content {
            text-align: center;
            font-family: courier new;
        }
        .error-title {
            color: red;
            font-size: 2em;
            font-weight: bold;
            margin: 0 0 10px 0;
        }
        .contact-text {
            font-size: 1.5em;
            margin: 5px 0;
        }
        .caution-img {
            width: 150px;
            height: 150px;
        }
    </style>
    <script language="vbscript">
        Sub window_onload()
            Dim container, totalWidth, totalHeight
            Set container = document.getElementById("content-container")
            
            totalWidth = container.offsetWidth
            totalHeight = container.offsetHeight
            
            ' 补偿窗口边框和标题栏
            totalWidth = totalWidth + 10
            totalHeight = totalHeight + 30
            
            self.ResizeTo totalWidth, totalHeight
            self.MoveTo (screen.Width - totalWidth)/2, (screen.Height - totalHeight)/2
        End Sub
    </script>
</head>
<body>
    <div id="content-container" class="container">
        <img class="caution-img" src="C:\SCRIPTS\OEE_SCRIPTS\Caution.png" alt="Caution">
        <div class="text-content">
            <div class="error-title">STOT Data Not Updating !</div>
            <div class="contact-text">Please Call / Contact</div>
            <div class="contact-text">The Line Technician !</div>
        </div>
    </div>
</body>
</html>

关键说明

  • 用offsetWidth和offsetHeight获取容器的实际渲染尺寸,包含padding和border(如果有的话)。
  • 窗口边框补偿值可以根据你的系统调整,如果窗口还是有点挤,就适当加大数值。
  • Flex布局确保图片和文字始终对齐,内容结构更稳定,尺寸计算更准确。

内容的提问来源于stack exchange,提问作者Kim.K.H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:20:59