Outlookのメールアイコンが出てたらメッセージを表示したい Notifire(6)

画像を比較する、一致判定をすることについて。

バイナリの検索、書き換えをするには?:[2012/10/06]
バイナリファイルで文字列を検索するには?:[2012/10/06]
バイナリデータを数値化して比較するには?:[2012/10/06]
目標の雰囲気は
TImageListに通知領域に表示されているアイコンをばらして格納しておいて
TImageに通知領域に表示されるOutlookのメールアイコンを置いといて
ImageList1.IndexOf(Image2.Picture.Bitmap) <>-1 です。
でも、予想通りIndexOfはなかったです。

じゃあImage1とImage2を比較する方法なんかない? のというわけで、使えそうなメソッドをみつけました。
Image2.Picture.Bitmap.RawImage.IsEqual(Image3.Picture.Bitmap.RawImage)


でも、これがまたうごきがよくわからない。

このコードは
・Image2の画像
・Image2の画像をImageList1に登録して、Image3に取り出したもの
を比較しています。
procedure TForm1.Button2Click(Sender: TObject);
begin
ImageList1.Clear();
ImageList1.Height := Image2.Picture.Bitmap.Height;
ImageList1.Width := Image2.Picture.Bitmap.Width;

ImageList1.Add(Image2.Picture.Bitmap, nil);
ImageList1.GetBitmap(0, Image3.Picture.Bitmap);

if Image2.Picture.Bitmap.RawImage.IsEqual(Image3.Picture.Bitmap.RawImage) then
Label1.Caption := '=' else Label1.Caption := '<>';
end;

当然、「=」になってほしいのに、なってくれません。

そもそもRawImageがなになのか知らないので、全く的はずれなことをしているのかも、と思って
・Image2の画像をImageList1に登録してImage2に戻しなおす
・ImageList1の同じ画像をImage3に取り出したもの
でも比べてみました。
procedure TForm1.Button2Click(Sender: TObject);
begin
ImageList1.Clear();
ImageList1.Height := Image2.Picture.Bitmap.Height;
ImageList1.Width := Image2.Picture.Bitmap.Width;

ImageList1.Add(Image2.Picture.Bitmap, nil);
ImageList1.GetBitmap(0, Image2.Picture.Bitmap);
ImageList1.GetBitmap(0, Image3.Picture.Bitmap);

if Image2.Picture.Bitmap.RawImage.IsEqual(Image3.Picture.Bitmap.RawImage) then
Label1.Caption := '=' else Label1.Caption := '<>';
end;

これだと「=」になります。

ひょっとするとImageList1を経由すると、見た目じゃ気づかない変更がされるのかもしれません。うーん。

***
この辺で目的と手段を見なおしてみます。

やりたいこと
Outlookのメールアイコンが出てたらメッセージを表示したい

方法をのんべんだらりと
メールアイコン自体がクラス名とかウィンドウ名を持っていると楽なんだけと持っていない。
幸い通知領域はクラスもわかっててイメージも取得できる。
目で見てメールのアイコンに気づくように、通知領域にメールのアイコンが表示されているかどうかを判断できないかを考えている最中。

取得した。バラバラにした。でも、ホントに判断するのか?
最初考えていたように、通知領域のアイコンが増えたらメッセージを出す、でやめてもいいんじゃないの? と悩んでいる最中。

ま、あれか。どうせぐちゃぐちゃのブサイクなゆるゆるのやり方でやってるんだから、比較する画像も比較される画像もTImageListに登録してからTImageに書き戻して比較するか。
TImageListを通すかどうかで目に見えない変化が起きている(データ的に一致しなくなる)だったら、どっちもTImageListを通してしまおうホトトg。

すっきり。

後は使い心地の問題ですね。で、多分今までで一番悩む予定なのが、メールのアイコンをどうやって覚えさせるか。今プログラムを作ってるパソコンにはOutlook入ってないので、メールアイコンを事前に準備できないし。
実際に使うパソコンで「このアイコン」って感じで登録できれば、アイコンの切り出し方が間違ってても、おんなじプログラムで切り出してるんだから大丈夫のはず。

テストようにTBitmapをいちいちCreateするのがめんどくさくてTImageを使ったけど、なんと楽なことか。やめられそうにないな。
関連記事
スポンサーサイト