blechmusikの日記

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

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

以下のエントリーの続きである。

今回の改変では、×ボタンの中心をただしくクリックするよう、クリックする位置を微調整した。また、特定の色の存在を判定し損ねていたことと、スクリプトの処理を続行するか否かを問うメッセージの表示形式を修正した。
スクリプトのソースはつぎの通りである。

;;; ウイルスバスターのポップアップ広告を素早く閉じる
;;; スクリプトのライセンスは 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

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


SetTimer, watch_ad, %timer_interval%
return


watch_ad:
    if ( check_colors("0xD9DCFC", "0x241CEB") )
    {
        click_close_button("0x999999", left_handed_mouse_mode)

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

        ;; ポップアップ広告が表示されたままかどうかを調べる
        if ( check_colors("0xD9DCFC", "0x241CEB") )
        {
            msgbox
                ,4
                , 
                , ポップアップ広告を消すことができませんでした`n処理を続行しますか?

            ;; 処理を続行しないときには、
            ;; スクリプトの処理を終了する
            IfMsgBox, No
                ExitApp
        }
    }
return


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


is_the_color_of_a_pixel(color_BGR)
{
    global X1, Y1, X2, Y2

    ;; PixelSearch - AutoHotkeyJp
    ;; http://sites.google.com/site/autohotkeyjp/reference/commands/PixelSearch
    PixelSearch, Px, Py, %X1%, %Y1%, %X2%, %Y2%, %color_BGR%, 3, Fast
    return % (ErrorLevel) ? 0
            : 1
}


click_close_button(color_BGR, left_handed_mouse_mode = 0)
{
    global X1, Y1
    global close_button_X1 := X1 + 250
    global close_button_end_Y1 := Y1 + 30

    PixelSearch, Px, Py, %close_button_X1%, %Y1%, %A_ScreenWidth%, %close_button_end_Y1%, %color_BGR%, 5, Fast

    if ( ErrorLevel = 0)
    {
        ;; ×ボタンの中心にマウスカーソルを移動する
        MouseMove, Px + 3, Py + 3

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

        if ( left_handed_mouse_mode )
            MouseClick, Right
        else
            MouseClick, Left
    }

    return
}