2017年4月19日水曜日

リロードじゃなければウィンドウサイズを変更する

F5キーを押すとHTAのウィンドウを閉じることなく再起動させることができます。
便利です。

resizeToという関数を使うとウィンドウのサイズを変更できます。
HTAは何も指定しなければモニタサイズに応じて大きく表示されますので、この関数を使わないとムダに大きく表示されてしまい不便なことがしばしばあります。
resizeToも便利です。

しかしresizeToを行うHTAでF5キーを使うと、リロード前に調整していたサイズから強制的にウィンドウサイズが変更されてしまい、わりと不便です。

できればresizeToを実行するのはHTA起動時のみにして、リロード時はリロード前のウィンドウサイズを保って欲しい…と思ったのでそれを叶える関数を作成しました。
ソース
<html>
<body></body>
<script>
桁=function(s,l){var a=Array(l+1).join('0')+s,L=a.length;return a.slice(L-l,L)}
リロードじゃなければリサイズする=function(X,Y){
var cimv2=GetObject("winmgmts:root\\CIMV2")
var getプロセス=function(PID){return (new Enumerator(cimv2.ExecQuery("SELECT * FROM Win32_Process where ProcessID="+PID))).item()}
var f=function(){
// 子プロセスをcscriptにすると黒い画面が一瞬表示されてしまう。
// 「//B」オプションを付けないとwscriptの設定画面が表示されてしまう。
var childPID = (new ActiveXObject('WScript.Shell')).Exec('wscript //B').ProcessID
// 子の親(自身)のPID取得
return getプロセス(childPID).ParentProcessID
}
// 1度目で取得に成功すればその値を返し、ダメなら2回目の処理を実行する。
var PID=f()||f(), 時間=getプロセス(PID).UserModeTime
if(時間<5){resizeTo(X,Y)}
document.body.innerText = 時間
}
リロードじゃなければリサイズする(300,300)
</script>
</html>

0 件のコメント:

コメントを投稿