2007年04月21日
川俣晶の縁側ソフトウェアその他開発日誌 total 2551 count

aimemon Version 0.5・リモデス接続を繰り返すと起こる問題を解消

Written By: 川俣 晶連絡先

 超難物だったaimemonのバグがやっと取れました。

 以下、修正点を説明します。

ウィンドウが不可視ならオフ扱いにする §

 見えないウィンドウがアクティブになっているケースがあります。

 このとき、見えないウィンドウに枠線を付けていました。

 そこで、見えない場合は対象外とするようにしてみました。(が、どこまで有効かは様子を見ないと分からない)

リモデス接続を繰り返すとタスクバーに名前が出たり、リージョンが不正になる問題 §

 リモデス(リモートデスクトップ)接続を繰り返すと、タスクバーにaimemonの名前が出るケースがありました。また、ウィンドウのリージョンが不正になって、ウィンドウが何も見えなくなったりするケースもありました。

 これらの問題を解消しました。

 以下は技術的な説明です。

 このバグの原因を調べるのに時間を食ってしまいましたが、結論はシンプルで、破棄してはいけないリージョンの破棄が原因でした。SetWindowRgn APIで設定したリージョンハンドルは破棄してはならないにも関わらず破棄していました。そういうコードをわざわざ追加していた理由は、リージョンの合成処理で使った一時的なリージョンを破棄していないことに気付いたためです。aimemonの初期バージョンでは、リージョンの作成は初期化とモニタサイズ変更の場合だけだったので致命的ではありませんでしたが、モニタ枠以外に枠を付けると頻繁にリージョン再作成が発生し、リソースを食いつぶす恐れがあったのです。そこで、きちんとリージョンを破棄するコードを書いてみたわけですが、そこで、勢い余って破棄してはいけないリージョンまで破棄してしまったわけです。

 蓋を開けてみれば、なんてことはないシンプルなミスでしたね。