blechmusikの日記

キー・カスタマイズ・ソフトウェア "DvorakJ" の覚え書きをはじめとして様々なことを書いています。

ウイルスバスターのポップアップ広告を素早く閉じるスクリプトを作成した

概要

以下のスクリプトを実行すれば、ウイルスバスターのポップアップ広告が表示されたら、その広告をすぐさま閉じる。

はじめに

インターネット上では、ウイルスバスターのポップアップ広告に対して不快感を表明している人が多々居る。Google で「ウイルスバスター ポップアップ」を検索してみるといい。「非表示」「うざい」「消す」「邪魔」といったことばが検索候補として表示されるだろう。
このポップアップ広告の性質は、つぎのようにまとめられている*1。すなわち、ユーザーが望まないタイミングで表示され、かつ、広告の表示を設定上無効化できない。その広告を表示しないようにするには、ポップアップ広告内の×ボタンを手動でクリックしなければならない。このように理解されている。
ここで私は、AutoHotkey を使用することで、ウイルスバスターのポップアップ広告を素早く閉じることができるのではないか、と考えた。AutoHotkey を知るにはAutoHotkeyJpを参照してほしい。今回の作業においては、おおまかにはつぎの二点をこなさなければならないだろう。それは、ポップアップ広告が表示されたことを検知することと、マウスのボタンをクリックすることである。どちらも、AutoHotkey を使用することで、どちらも自動化できる筈だ。
以下では、スクリプトを動作させる環境を説明してから、スクリプトの内容をかいつまんで解説しよう。

AutoHotkey_L の導入

ここでは、AutoHotkey の派生版である AutoHotkey_L を導入してみる。

  1. AutoHotkey_Lの公式ページにアクセスする
  2. "Installer" をダウンロードして実行し、AutoHotkey_L をインストールする

これで AutoHotkey_L を導入し終えた。

スクリプトの設定

以下のスクリプトのソースを vb_ad_killer.ahk のように、*.ahk というファイル名で保存する。文字コードUTF-8 (BOM付き)として保存することに注意すること。その際、初期設定を変更するなら、当該箇所を書き換えておくこと。変更可能な設定は二つある。

ポップアップ広告が表示されているかどうかを監視する間隔
間隔を短くするほど、ポップアップ広告を素早く検知し、閉じることができる。ただ、あまりにも間隔を短くすると、パソコンに負荷がかかる。
左手用のマウスを使用中
左手用のマウスを使用しているとき、すなわち右にあるボタンで左クリックを実現しているならば、左手用のマウスを使用中である旨の設定をすること。この設定を怠ると、ポップアップ広告の×ボタンの上で、何度も右クリックし続けることになってしまう。

スクリプトのソースはつぎのとおりだ。

;;; ウイルスバスターのポップアップ広告を素早く閉じる
;;; スクリプトのライセンスは NYSL

;;; このスクリプトを終了するには、タスクトレイ上のアイコンから操作すること

#NoEnv
#Persistent
#SingleInstance, Force
SendMode Input

;;; -------------------- 以下、設定項目 -------------------

;;; ポップアップ広告が表示されているかどうかを監視する間隔
;;; 単位は ms
timer_interval := 500

;;; 左手用のマウスを使用しているときは
;;; 0 を 1 に書き換える
left_handed_mouse := 0

;;; -------------------- 以上、設定項目 -------------------


;;; CoordMode - AutoHotkeyJp
;;; http://sites.google.com/site/autohotkeyjp/reference/commands/CoordMode
CoordMode, Pixel, Screen
CoordMode, Mouse, Screen


;;; 組み込み変数 - AutoHotkeyJp
;;; http://sites.google.com/site/autohotkeyjp/reference/Variables
SysGet, VirtualWidth, 78
SysGet, VirtualHeight, 79

X1 := VirtualWidth - 300
Y1 := VirtualHeight - 310
X2 := X1 + 30
Y2 := Y1 + 30


;;; ×ボタンの位置
X := X1 + 280
Y := Y1 + 15

SetTimer, watch_ad, %timer_interval%
return


watch_ad:
    if ( is_the_color_of_a_pixel("0xD9DCFC"
                            , X1, Y1
                            , X2, Y2))
    {

        if ( is_the_color_of_a_pixel("0x241CEB"
                                , X1, Y1
                                , X2, Y2))
        {
            ;; MouseClick - AutoHotkeyJp
            ;; http://sites.google.com/site/autohotkeyjp/reference/commands/MouseClick

            if ( left_handed_mouse )
                MouseClick, Right, X, Y
            else
                MouseClick, Left, X, Y
        }
    }
return

 
is_the_color_of_a_pixel(color_BGR, X1, Y1, X2, Y2)
{
    ;; PixelSearch - AutoHotkeyJp
    ;; http://sites.google.com/site/autohotkeyjp/reference/commands/PixelSearch

    PixelSearch, Px, Py, %X1%, %Y1%, %X2%, %Y2%, %color_BGR%, 0, Fast
    return % (ErrorLevel) ? 0
            : 1
}

スクリプトの処理内容をまとめると、つぎのようになる。まず、モニタのサイズを検出する。その検出結果から、ポップアップ広告が出現すると思われる領域を予想しておく。つぎに、指定した間隔毎に、ポップアップ広告内の特定箇所に特定の色があるかどうかを判定する。もしもその色が見つかったならば、×ボタンの位置にマウスを移動させ、そこでクリックする。こうしてクリックし終えたときと、特定の色が見つからなかったときには、監視を続行する。スクリプトを終了させるときには、タスクトレイ上のアイコンから操作すること。

スクリプトの実行

あとはスクリプトを実行するだけだ。スクリプトのファイルをダブルクリックすること。パソコンの起動時にスクリプトを自動的に実行するには、スタートアップにこのスクリプトを登録するだけでよい。

おわりに

当方の環境では、上記のスクリプトを実行すると、ウイルスバスターのポップアップ広告を自動的に閉じることができた。
もしかしたら、環境によっては、上記のスクリプトが正常に動作しないかもしれない。それは、ポップアップ広告の表示形式が変更されたり、他のソフトウェアによる何らかの干渉のせいかもしれない。その際には、スクリプトを適宜修正してほしい。