blechmusikの日記

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

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

本文

ウイルスバスターのポップアップ広告を素早く閉じるスクリプトを作成した - blechmusik2の日記の続きである。
変更点は次の通りだ。

  • 複数台のモニタを設置しているときは、主たるモニタ内からポップアップ広告を検知するようにした
  • ポップアップ広告を検知して閉じる動作を試みたものの、失敗に終わったときは、その旨のメッセージを表示するようにした

改良したスクリプトのソースは以下の通りである。

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

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

#NoEnv
#Persistent
#SingleInstance, Force
SendMode Input

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

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

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

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


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

SetTimer, watch_ad, %timer_interval%
return


watch_ad:
    if ( check_colors("0xD9DCFC", "0x241CEB") )
    {
        ;; クリックする
        press_close_button(left_handed_mouse_mode)

        ;; 監視処理を 2 秒間待機する
        Sleep,2000

        ;; ポップアップ広告が表示されたままかどうかを調べる
        if ( check_colors("0xD9DCFC", "0x241CEB") )
        {
            msgbox,ポップアップ広告を消すことができませんでした`n処理を続行しますか?, 4
            ;; 処理を続行しないときには、
            ;; スクリプトの処理を終了する
            IfMsgBox, No
                ExitApp
        }
    }
return


check_colors(arg1, arg2)
{
    return % is_the_color_of_a_pixel(argv1)
          && is_the_color_of_a_pixel(argv2)
}


is_the_color_of_a_pixel(color_BGR)
{
    ;;; 組み込み変数 - AutoHotkeyJp
    ;;; http://sites.google.com/site/autohotkeyjp/reference/Variables
    global X1 := A_ScreenWidth - 300
    global Y1 := A_ScreenHeight - 310
    global X2 := X1 + 30
    global Y2 := Y1 + 30

    ;; 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
}


press_close_button(left_handed_mouse_mode)
{
    global X1, Y1

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

    ;; MouseClick - AutoHotkeyJp
    ;; http://sites.google.com/site/autohotkeyjp/reference/commands/MouseClick

    if ( left_handed_mouse_mode )
        MouseClick, Right, X, Y
    else
        MouseClick, Left, X, Y

    return
}