2016年11月24日木曜日

htaのウィンドウをアクティブにする方法

HTA内部でWScript.ShellのAppActivateメソッドを実行しても、HTAのウィンドウをアクティブにすることはできませんが、HTAから外部スクリプトを作成して、そちらからAppActivateを実行すればアクティブにできます

アクティブにしたいHTAがシングルインスタンス制限を有効にしても良いならば、上記の方法より短いコードで同様の効果を得る方法がありました。




ソース



起動すると以下の画面が表示されます。


画面上のボタンを押して3秒以内に他のウィンドウを重ねると


main関数が実行されたタイミングで、ウィンドウがアクティブになります。


main実行時にウィンドウが最小化されている場合、ウィンドウがアクティブになりません。
その場合、document.hasFocus()の返り値がfalseになるので、WScript.ShellのRunで自身のPathを起動して、その起動完了を待たずに既存のインスタンスは終了します。

※最小化されている場合ウィンドウがアクティブにならないのはWScript.ShellのAppActivateメソッドも同じです。

2 件のコメント:

  1. 最小化を解除する方法として試したことと、結果

    ・confirm → メイン画面が最小化状態の間は表示されない。最小化解除するとconfirmのウィンドウも表示される。
    ・alert → 同上
    ・window.showModalDialog → 同上
    ・VBScriptのmsgbox → msgboxのウィンドウだけは表示される。メインウィンドウは最小化状態のまま。
    ・window.open → ブラウザが起動するだけ。メインウィンドウは最小化状態のまま。

    返信削除
  2. (new ActiveXObject('WScript.Shell')).popup('http://www.google.co.jp', 1, 123, 3) → msgboxと同じ結果。

    返信削除