画面中央にHTAを作る方法(Win32_DesktopMonitor)
ウィンドウのサイズを変更したり(必要に応じて)、中央に配置することができますが、そうすると画面に一瞬ちらつきが生じます。これはあまり目立たないので、実際の結果は期待通りのもので、HTAは画面の中央に表示されることになります。この処理をもう少しスムーズに行いたいのですが、今のところこの方法を使うしかありません。
以下は、HTAの例のコードです。(この処理を実装するには、コードをコピーしてメモ帳に貼り付け、拡張子.htaで保存します) 私たちが気にする部分(そして本当に役に立つ唯一の部分)は Window_Onload サブルーチンで、HTA がロードまたは更新されるたびに自動的に実行されます: Window_Onload サブルーチンには、次のようなものがあります。
<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クラスにクエリーを発行します。
注 ここでは、コンピュータに接続されているモニタは1台だけであると仮定しています。複数のモニターがある場合は、プライマリーモニターの画面の高さと幅を確実に取得するために、WHERE句を追加する必要があります。
Win32_DesktopMonitor クラスに接続した後、次の 2 行のコードで現在の画面の大きさを判断します。
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ピクセル(これはウィンドウの上下の端のサイズです)とします。
これで、あと2つやるべきことができました。1つ目は、ウィンドウのサイズを800x600ピクセルに変更することです。
window.resizeTo 800,600
次に、ウィンドウを適宜配置します。これはこれから行うことです。
window.moveTo intLeft, intTop
あとは、moveToメソッドを呼び出して、HTAウィンドウの左上隅が左から112ピクセル、上から84ピクセルになるように移動させるだけです。
ちなみに、resizeToメソッドをこのサブルーチンの一番下に置いたのは、moveToと一緒にresizeToの話をしたいという教育上の理由からです。しかし、ウィンドウのサイズを変更してサブルーチンを開始すると、わずかな、あまり目立たないフリッカーが発生します。
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でこれを実現する方法は見つかっていません。(でも、あきらめたわけではないんです。)
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
WindowsでのMysql sqlステートメントのバッチ実行
-
PythonはWordの読み書きの変更操作を実装している
-
Ruby on Railsフレームワークの設計構造をMVCマインドで理解する
-
nugetパッケージのファイル消失問題を解決するためのpowershellスクリプトを追加しました。
-
PowerShellで光学ドライブをオープン/クローズする
-
Rubyを使ったラムダ計算の詳しいシミュレーション方法
-
DOSバッチ処理による時限式シャットダウン操作の方法詳細
-
Pythonの生産性を向上させる5つのJupyter notebookプラグイン
-
Rubyのオブジェクト指向のアプローチによるプログラミング学習雑学
-
詳細な手順でフォーマットされたディスクを素早く作成するシェルスクリプト