26

ウィンドウを常時監視して、指定タイトルのウィンドウを閉じるスクリプトのお裾分けです。
ひょっこり現れるウィンドウ、「邪魔だ邪魔だー、どけどけーい」なウィンドウ。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)

 

機能の実感方法

  1. 2つの.vbsファイルをデスクトップ等に保存
  2. メモ帳を起動
  3. [指定タイトルのウィンドウを閉じる.vbs]をダブルクリックで実行
    → ウィンドウタイトル「無題 - メモ帳」が閉じられる
  4. 再度メモ帳を起動
    → .vbsがすぐに反応して、メモ帳が閉じられる
  5. [VBSの停止.vbs]をダブルクリックで実行
  6. 再度メモ帳を起動
    → 以降は、通常通りにメモ帳の起動をキープできる

 

使い方

  1. [指定タイトルのウィンドウを閉じる.vbs] をメモ帳で開き、機能の実感用の、"無題 - メモ帳"を目的のウィンドウタイトルに書き換えて上書き保存
  2. シナリオの先頭に「ファイルと関連づいているアプリ起動」を配置
    パス:値⇒指定タイトルのウィンドウを閉じる.vbs
  3. シナリオの末尾に「ファイルと関連づいているアプリ起動」を配置
    パス:値⇒VBSの停止.vbs

 

注意

  • もし指定したウィンドウタイトルと.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/?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

anothersolution 回答した質問
回答とコメントは、会員登録(無料)で閲覧できるようになります。