これは古い記事です。新しい記事は「ローカルにRedでも「Neut」でも電気が流れる椅子」です。
0.0 で生活していると、いつのまにかLocalにRedがいて、あわてることがあります。LocalにRedが来たら音で知らせてほしいです。
というわけで、Local窓を監視するツールを作ることにしました。
以下はあくまでも参考としてであり、自分の環境やスタイルに合わせて調整してください。
メモリの解析、Cacheファイルの解析、通信パケットの解析、画面からの判断と、やり方はいくつかありそうですが、一番簡単で規約にも問題ない画面からの判断にしました。デメリットは、「Local窓で数が多く、はみ出たRedは見逃す」ことです。つまり、多人数の堀OPでは役に立ちません。
要件は「特定領域に赤色があると警告する」だけなので、UWSCを利用しました。
以下、ソース。
複数のクライアントが前提のため、監視するEVEクライアントをアクティブにし、ALT + F1キーでUWSCの再生します。peekcolorを利用した色判定は応用範囲が広いので、参考になれば幸いです。
// 監視EVE Window をアクティブにして、ALT+F1で、開始する。 public RED_MARK_X = 295; // 赤アイコンの左端座標(正確な数値が必須) public RED_MARK_Y_START = 100; // ローカル窓の上端Y座標(小さめでもok) public RED_MARK_Y_END = 720; // ローカル窓の下端Y座標(大きめでもok) public RED_MARK_HEIGHT = 9; // 監視するICONの高さ。変更の必要は無い id = getid(GET_ACTIVE_WIN); acw(id, -1280, 100); // 通常は acw(id, 0, 0)、マルチモニターの左端に配置するため、この値になっています。変更が必須です。 mouseorg(id); while isRed() = false sleep(2); wend sound("C:\WINDOWS\Media\ringin.wav", true); // WindowsXPの場合のパス。好きなwavファイルに変更します。 speak("Red Alert", false); function isRed for i = RED_MARK_Y_START to RED_MARK_Y_END step RED_MARK_HEIGHT c = peekcolor(RED_MARK_X, i); R = c and $FF; G = (c and $FF00) / $100; B = (c and $FF0000) / $10000; ifb (R > 140) and (G < 80) and (B < 10) then // ifb (R < 10) and (G < 80) and (B > 100) then result = true; exit endif next result = false; exit; fend
座標のはかり方は、画像をキャプチャーして、ペイントで確認するのが楽です。
- EVE Windowをアクティブにして、Alt + PrintScreenキーで、キャプチャー
- ペイントを起動して、貼り付け(Ctrl + V)
- ペイントの鉛筆を選んで、ローカル窓の赤アイコンの左端の座標を確認(画像参照)
え、電気が流れる椅子の話し?それは、、、