悲しいときー、邪魔なウィンドウが現れたときー
ウィンドウを常時監視して、指定タイトルのウィンドウを閉じるスクリプトのお裾分けです。
ひょっこり現れるウィンドウ、「邪魔だ邪魔だー、どけどけーい」なウィンドウ。WinActorで考慮するのはメンドイ。
[監視ルール]で対処しにくかったり、PCへの負荷が気になる場面の代替手段として、VBSを停止するスクリプトとセットでどうぞ。
ひとまず控えめに書いてますが、メリットが多いので乗り換えのススメです。
[監視ルール]さん、ゴメンナサイ。
長々と書いてますけど、長いなりの価値がある内容のつもりです。
機能
- ウィンドウを常時監視して、指定タイトルのウィンドウを閉じます。
用途
- 監視ルールの代用
- ウィンドウタイトルベースのみに対応
スクリプト(出典は最下部参照)
ここで見やすいように、全角スペースでインデントしてあります。
適宜Tabとか半角スペース4つとかに置き換えてください。
' [指定タイトルのウィンドウを閉じる.vbs]
' オブジェクトの生成
Set wshShell = CreateObject("WScript.Shell")
' 無限ループ
Do
' ウィンドウタイトルを指定
ret = wshShell.AppActivate("無題 - メモ帳")
' 一致したら
If ret = True Then
' Alt+F4で閉じる
wshShell.SendKeys "%{F4}"
End If
' チェック間隔(ミリ秒)
WScript.Sleep 100
Loop
' [VBSの停止.vbs]
Set wshShell = WScript.CreateObject("WScript.Shell")
wshShell.Run "taskkill /F /IM wscript.exe", 0, True
- VBS実行中のタスクマネージャ上の表示:Microsoft R Windows Based Script Host
- 実体:wscript.exe (= C:\Windows\System32\wscript.exe)
機能の実感方法
- 2つの.vbsファイルをデスクトップ等に保存
- メモ帳を起動
- [指定タイトルのウィンドウを閉じる.vbs]をダブルクリックで実行
→ ウィンドウタイトル「無題 - メモ帳」が閉じられる - 再度メモ帳を起動
→ .vbsがすぐに反応して、メモ帳が閉じられる - [VBSの停止.vbs]をダブルクリックで実行
- 再度メモ帳を起動
→ 以降は、通常通りにメモ帳の起動をキープできる
使い方
- [指定タイトルのウィンドウを閉じる.vbs] をメモ帳で開き、機能の実感用の、"無題 - メモ帳"を目的のウィンドウタイトルに書き換えて上書き保存
- シナリオの先頭に「ファイルと関連づいているアプリ起動」を配置
パス:値⇒指定タイトルのウィンドウを閉じる.vbs - シナリオの末尾に「ファイルと関連づいているアプリ起動」を配置
パス:値⇒VBSの停止.vbs
- シナリオファイルと同じフォルダへの格納がオススメ
- 別フォルダに格納したなら、適宜絶対パスか相対パスにする
https://www.google.com/search?q=絶対パス+相対パス
注意
- もし指定したウィンドウタイトルと.vbsファイルを格納したフォルダ名が同じだと、そのフォルダを開こうとしてもすぐに閉じられてしまう =[VBSの停止.vbs]を実行しにくくなる
→ Windowsキー+Rで[ファイル名を指定して実行]を起動し、[VBSの停止.vbs]のフルパスを入力してEnter押下で、VBSを停止可能 - タスクスケジューラや起動ショートカットからシナリオを実行している場合
→ その.vbsファイルの最適な位置に[指定タイトルのウィンドウを閉じる.vbs]の中身を組み込むか、呼び出すことを検討
メリデメ
[指定タイトルのウィンドウを閉じる.vbs]
- ◎ 単純明快な機能
- ◎ 高速(反応が一瞬)
単機能なので、[監視ルール]より速い
指定したタイトルのウィンドウをほぼ見かけないで済む - ◎ シナリオの実行速度を妨げない
CPUやメモリにほとんど負荷なし
こき使いまくっても、愚直にキビキビと役割を全うし続ける - ◎ [監視ルール]のように「ウィンドウ識別クリア」を必要としない
今のところ、「ウィンドウ識別クリア」相当が必要な場面に遭遇していない - ◎ 10行未満の短いコードで、VBS入門にも適する
- ◎ いわゆる「枯れた技術」で構成されてて安心
- ◎ 汎用性が高く、カスタマイズが容易
- ◎ リファレンスや拠り所となるノウハウがネットで容易に見つかる
- ◎ WinActorと同じ処理の担当者も恩恵に与れる
数日100名規模で使い、概ね好評(特に不具合報告なし) - ◎ 独立したVBSとして機能する ≒ いろんな並行処理が可能
- ◎ ウィンドウの体なら、きっとほとんどのケースで痒いところに手が届く
WinActorのダイアログとか
Excelのマクロ実行中のダイアログとか
その他、WinActorで処理しにくいウィンドウ全般 - ▲ 充分な検証が必要
これに限らず、実務で採り入れるということはそういうこと
このVBSを使い始めて日が浅い
わたし自身は、3分検索、5分加工、10分検証のみ
単純明快な機能なので、きっと問題ない
何かとバッティングする万一の可能性は否定できない - ▲ タイトル以外の[ウィンドウ識別ルール]で構成している[監視ルール]には非対応
- ▲ ライブラリ化に向いてない(無限ループのスクリプトなので、次のノードに進まない)
- ▲ 使い始めるのに、スクリプトの編集を要する
- ▲ 独立したVBSとして使用するなら、タスクバーにドラッグして使うなどの工夫検討が望ましい
[VBSの停止.vbs]
- ◎ wscript.exe停止の用途で汎用的に使える
- ▲ ほかで.vbs等のwscript.exeを使っているものがあれば、それもまとめて終了になる
いかがでしょう。ほぼメリットしかない。
ウチでは超魅力的な掘り出し物で、すでに[監視ルール]の代わりに使い始めてます。
みなさんのところで、[監視ルール]から積極的に乗り換えを検討する候補になり得るでしょうか。
試してみたとか、そのまま採用したとか、こう加工して採用したとか、こんな懸念があるとか、便乗して機能を強化してみたとか、声を寄せていただけると嬉しいです。
加工/応用の勘所
- 閉じる以外のアクションへの変更
→ https://www.google.com/search?q=VBS+SendKeys& - 複数パターンのウィンドウタイトルへの対応
→ If ~ End Ifの直列 - インターバルの加減(100=0.1秒がオススメ)
→ Sleepのミリ秒を100~1000くらいに適宜スライド
バージョンアップ構想
- 今のところなし
すでにできあがってる印象 - 強いて挙げるなら、完全一致/部分一致/正規表現への対応とか
単純明快から遠ざかるので、あんまり踏み入れたくない - [ウィンドウ識別ルール]のウィンドウタイトル以外、ウィンドウクラス名、プロセス名、ウィンドウサイズとの組み合わせ対応
https://www.google.com/search?q=ウィンドウクラス名
手が届かない領域でもなさそうではある
実務で必要に迫られてないため、積極的になりにくい
参考スレッド
https://winactor.com/questions/question/ウインドウ分岐を最速・安定的に駆け抜ける/
権利関係
- 教え教えられが主旨のQAサイトからの拾い物に助けられた格好
- わたし自身は考えかた、使い方の提案のみ
- この機能は誰が作ってもほぼ同じ表記のスクリプトになる
- 以前に調べた結果を踏まえると、誰が作ったとしても権利は主張できないと思われる
https://winactor.com/questions/question/スクリプトの権利について、本気出して調べてみ/
出典(元ネタ情報)
指定タイトルのウィンドウがあればAlt+F4
vbscript to auto detect open window and close it OR Google Apps Script to control form submit button
https://stackoverflow.com/questions/19844729
https://stackoverrun.com/ja/q/5418472
指定タイトルのウィンドウがあればEnter
AppActivate to Close Window not Looping
https://stackoverrun.com/ja/q/11666518
VBSの停止方法
How to stop a specific script in VBScript
https://stackoverrun.com/ja/q/11746989