如何使一个HTA位于屏幕中心(Win32_DesktopMonitor)

所属分类: 脚本专栏 / hta 阅读数: 1904
收藏 0 赞 0 分享

我们可以调整(如果需要)窗口大小并使其居中,但这样做时会在屏幕上出现瞬间的闪烁。这并不是太明显,其实际结果就是你所期望的:HTA 会位于屏幕中心。我们希望这个过程变得稍微流畅些,但目前我们不得不使用此方法。
下面是 HTA 示例的代码。(若要实现此过程,请复制该代码,并将其粘贴到记事本中,然后以 .hta 为文件扩展名保存该文件。)我们担心的部分(也是唯一真正有用的部分)是 Window_Onload 子例程,每当 HTA 被加载或更新时,该子例程就自动运行:

复制代码 代码如下:

<html>
<head>
<title>Centered HTA</title>
<HTA:APPLICATION
ID="objHTA"
APPLICATIONNAME="Centered HTA"
SCROLL="yes"
SINGLEINSTANCE="yes"
>
</head>
<SCRIPT Language="VBScript">
Sub Window_Onload
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * From Win32_DesktopMonitor")
For Each objItem in colItems
intHorizontal = objItem.ScreenWidth
intVertical = objItem.ScreenHeight
Next
intLeft = (intHorizontal - 800) / 2
intTop = (intVertical - 600) / 2
window.resizeTo 800,600
window.moveTo intLeft, intTop
End Sub
</SCRIPT>
<body></body>
</html>

启动此 HTA - 一个快速闪烁之后 - 窗口将调整为 800x600 像素,并将位于屏幕中心。

好问题:这里将要发生什么?我们先使用一些标准 WMI 代码,连接到本地计算机上的 WMI 服务,然后查询 Win32_DesktopMonitor 类。

注意。我们假定您的计算机只连接了一台显示器。如果您有多台显示器,您将必须添加一个 WHERE 子句来确保您将检索主显示器的屏幕高度和宽度。

连接到 Win32_DesktopMonitor 类后,我们将使用下列两行代码来确定当前屏幕的尺寸:

复制代码 代码如下:

intHorizontal = objItem.ScreenWidth
intVertical = objItem.ScreenHeight

我们已经事先决定,想让 HTA 窗口的宽度为 800 像素,高度为 600 像素。因此,我们可以使用以下代码计算出需要将该窗口的左上角放在什么位置:

复制代码 代码如下:

intLeft = (intHorizontal - 800) / 2
intTop = (intVertical - 600) / 2

正如您所看到的,我们将获得屏幕宽度(存储在 intHorizontal 变量中)并减去 800 像素(HTA 窗口的水平尺寸)。假定我们有一台分辨率为 1024x768 的显示器。1024 减去 800 得 224:这告诉我们屏幕比 HTA 窗口宽多少。若要使该窗口居中,我们只需确保每个边为 112 像素;这就是用 224(即 intHorizontal – 800)除以 2 的原因。

然后,对于屏幕高度,重复该过程。对于我们的示例显示器,得到的是 768 – 600(即 168),然后除以 2 得到 84 像素(即该窗口上下边的尺寸)。

这样,我们还需要做两项工作。第一,将窗口调整到 800x600 像素:

window.resizeTo 800,600

第二,相应地放置窗口。这就是我们现在要做的:

window.moveTo intLeft, intTop

我们要做的所有事情就是调用 moveTo 方法并移动 HTA 窗口,使其左上角位于距左侧 112 像素、距顶端 84 像素的位置。

顺便说一下,我们将 resizeTo 方法放在该子例程底端附近,以供教学之用:我们想要将 resizeTo 与 moveTo 一起讲述。然而,当您通过调整窗口启动子程序时,将有一个轻微的、不太明显的闪烁:

复制代码 代码如下:

Sub Window_Onload
window.resizeTo 800,600
strComputer = "."
Set objWMIService = GetObject("Winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * From Win32_DesktopMonitor")
For Each objItem in colItems
intHorizontal = objItem.ScreenWidth
intVertical = objItem.ScreenHeight
Next
intLeft = (intHorizontal - 800) / 2
intTop = (intVertical - 600) / 2
window.moveTo intLeft, intTop
End Sub

这不是个大问题,但有些帮助。我们会继续寻找消除闪烁的方法。(为什么如此困难?理想状态下,在调整和移动 HTA 窗口之前,我们会将其隐藏,这可以使用 Internet Explorer 来执行。然而,我们还没有找到一种使用 HTA 来执行该操作的方法。但我们从未放弃。)

更多精彩内容其他人还在看

从 HTA 中启动应用程序

如何从 HTA 中启动应用程序
收藏 0 赞 0 分享

ASP 辅助工具(hta版)

当我们使用asp的一些字段获取功能的时候,这个功能就非常有用了。
收藏 0 赞 0 分享

hta编写的软件管理工具0.1(IE7.0测试通过)

程序初始化是建立与本文件同名后缀为mdb的数据库
收藏 0 赞 0 分享

exe转换16进制的html保存的hta实现代码

用下面这个hta文件来转exe变成16进制的html保存了。这样也会方便一点。
收藏 0 赞 0 分享

VBS脚本的GUI界面 HTA简明教程(网络搜集整理)

HTA是HTML Application的缩写(HTML应用程序),是软件开发的新概念,直接将HTML保存成HTA的格式,就是一个独立的应用软件,双击就能运行,与VB、C++等程序语言所设计的软件没什么差别。
收藏 0 赞 0 分享

winXP下用VBS写的代码编辑器

利用VBS脚本+DHTML,主要功能由正则表达式+wmic来完成,代码需保存为HTA类型的文件,当然也可以更改为纯粹的VBS脚本,不过那样效率低多了,而且代码更复杂。
收藏 0 赞 0 分享

扣代码工具 hta版

需要用到 InternetExplorer.Application 对象,所以做成了HTA文件。代码如下:(不能直接运行,请下载附件运行其中的 “捕获者.hta”,或者将下面代码复制后保存到本地并以 hta 为扩展名)
收藏 0 赞 0 分享

用hta实现的桌面漂浮flash

用hta实现的桌面漂浮flash,效果不错,其实主要是javascript代码,大家把代码拷到网页中也一样用,ie only.
收藏 0 赞 0 分享

hta编写的消费记录程序

总是无节制消费,一年到头都没钱花,于是....纯手工打造,高手勿笑...
收藏 0 赞 0 分享

hta编写的常用工具箱(常用工具快捷方式等)

首先值得说明的是:这个小程序的名称还待定,欢迎各位朋友给出建议。另外,欢迎对程序存在的bug和功能给出建议和意见,本人在此表示感谢!!
收藏 0 赞 0 分享
查看更多