ローカルにRedで電気が流れる椅子

これは古い記事です。新しい記事は「ローカルに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

座標のはかり方は、画像をキャプチャーして、ペイントで確認するのが楽です。

  1. EVE Windowをアクティブにして、Alt + PrintScreenキーで、キャプチャー
  2. ペイントを起動して、貼り付け(Ctrl + V)
  3. ペイントの鉛筆を選んで、ローカル窓の赤アイコンの左端の座標を確認(画像参照)

RedAlertXPosition

え、電気が流れる椅子の話し?それは、、、

Leave a Reply