HTAをちょこちょこいじくっていてプログラムを画面中央に表示したいなーどこかにコード落ちていないかなーと思って探してみたら「Hey, Scripting Guy! 画面上の HTA を中央揃えにする方法はありますか」にちょうどピッタリなコードがあったのでそれを使ってみることに。
以下がそのコード。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<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> |
が、これをそのままコピペして実行してみるもなんとうまくいかない!!
うーむ。どうやら見てみると下記で今使っているディスプレイの値をとれていないらしい。
1 2 |
intHorizontal = objItem.ScreenWidth intVertical = objItem.ScreenHeight |
物理的なPCだと普通に中央に表示されるため、今使用している端末が仮想的なやつなのでそれが原因でディスプレイの情報をもってこれないのかなと思います。
なので、対策してみました。
マリーアントワネットも言ってましたが、「ディスプレイのサイズが取れないなら、強制的に値を入れればいいじゃないの」ということをすればいいですね。
シンプル。
シンプルですが使う環境が特定されていないとダメっちゃだめですけどね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<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 tmp = IsNull(intHorizontal) if tmp = True then intHorizontal =1920 intVertical = 1080 end if intLeft = (intHorizontal - 800) / 2 intTop = (intVertical - 600) / 2 window.resizeTo 800,600 window.moveTo intLeft, intTop End Sub </SCRIPT> <body></body> </html> |
23行目~27行目にintHorizontalの値がNullか判定しNullだったらディスプレイの値を入れてあげるコードを追加しました。
これで見事中央に表示されます。
本当なら何とかディスプレイの値を持ってくるのが正しいんだと思いますけどめんどくさいですよね。
日々くだらないことを追い求め、黒歴史をまとめておくための自由なブログ。
あんまり役立つことは書きませんが主に日記・ゲームや買ったものについての記事を気まぐれで好き勝手書いています。