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


我们可以调整(如果需要)窗口大小并使其居中,但这样做时会在屏幕上出现瞬间的闪烁。这并不是太明显,其实际结果就是你所期望的: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就是一个HTML应用程序(HTML Application),只要你双击就能运行

只要简单的用.hta为扩展名保存HTML页面就行了

下面的一个标准的HTML应用程序:

<HTML>

<HEAD>

<TITLE>HTA Demo</TITLE>
<HTA:APPLICATION ID=〃oHTA〃
APPLICATIONNAME=〃myApp〃

BORDER=〃thin〃

BORDERSTYLE=〃normal〃

CAPTION=〃yes〃

ICON=〃filename.ico〃

MAXIMIZEBUTTON=〃yes〃

MINIMIZEBUTTON=〃yes〃

SHOWINTASKBAR=〃no〃

INGLEINSTANCE=〃no〃

SYSMENU=〃yes〃

VERSION=〃1.0〃

WINDOWSTATE=〃normal〃>

</HEAD>

<BODY SCROLL=〃no〃>

<H1>HELLO, WORLD!</H1>

</BODY>

</HTML>

它多了HTA:APPLICATION标签。其实就是这个标签提供了一系列面向应用程序的功能。

它的各种属性:

APPLICATIONNAME属性(applicationName)

此属性为设置HTA的名称。

BORDER属性(border)

此属性为设置为HTA的窗口边框类型,默认值为 thick。

它可以设为 thick
指定窗口为粗边框

dialog window
指定窗口为对话框

none
指定窗口无边框

thin
指定窗口为窄边框

BORDERSTYLE属性(borderStyle)

此属性为设置HTA窗口的边框格式,默认值为 normal。

它可以设为

normal 普通边框格式

complex 凹凸格式组合边框

raised 凸出的3D边框

static 3D边框格式

sunken 凹进的3D边框

CAPTION属性(caption)

此属性为设置HTA窗口是否显示标题栏或标题,默认值为 yes。

ICON属性(icon)

此属性为设置应用程序的图标。

MAXIMIZEBUTTON属性(maximizeButton)

此属性为设置是否在HTA窗口中显示最大化按钮,默认值为 yes。

MINIMIZEBUTTON属性(minimizeButton)

此属性为设置是否在HTA窗口中显示最小化按钮,默认值为 yes。

SHOWINTASKBAR属性(showInTaskBar)

此属性为设置是否在任务栏中显示此应用程序,默认值为 yes。

SINGLEINSTANCE属性(singleInstance)

此属性为设置是否此应用程序同时只能运行一次。次属性以APPLICATIONNAME属性作为标识,默认值为 no。

SYSMENU属性(sysMenu)

此......余下全文>>
 

我用HTA做了一个界面程序,回答共1条set ws=createobject("wscriptshell")wsrun "运行的内容

createobject("wscript.shell").run("C:\Program Files\TTPlayer\TTPlayer.exe d:\生日歌.mp3")
 

评论关闭