如何使一個HTA位於螢幕中心(Win32_DesktopMonitor)_hta

來源:互聯網
上載者:User

我們可以調整(如果需要)視窗大小並使其置中,但這樣做時會在螢幕上出現瞬間的閃爍。這並不是太明顯,其實際結果就是你所期望的: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 來執行該操作的方法。但我們從未放棄。)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.