WLM(Windows Live Messenger) Add-inプログラミング

 お友達のタイチ(id:taichitaichi)さんが、WLM Add-inのサンプルプログラムとプログラミング上のコツを公開しています。

http://d.hatena.ne.jp/taichitaichi/20070816/1187285628

 そこで、みはえるからもmihaDice(と、現在製作中のアドイン)を作成している際に気がついた事を、羅列しておきます。参考になれば幸いです。まあ、国内でWLM Add-inに挑戦してる人が我々以外に何人もいるのかわかりませんが^^;

Initializeメソッドが実行されるタイミングは、ユーザーが「ツール」メニューを開いた時(っぽい)。

 FriendlyNameが表示される訳だから、当たり前と言えば当たり前なんですが、「ツール」メニューを開いた時にInitializeメソッドが実行されます。確認してないけど、アドインdllを指定した時もなのかな? Initalize内で別スレッド走らせる場合とかに注意。

アドインをオフにしても、イベントが発行されなくなるだけで、アドイン自体は殺されない(っぽい)。

 上と関連してますが、Timerにメソッドをハンドリングさせて、90秒ごとにBBSにテキストを登録するテストをしてたら、アドインをオフにしても1時間くらいテキストが登録され続けて、後で気づいてビビリました^^; shutdownはキチンと実装しましょうという話。

オリジナル絵文字は同時に5個までしか送信できない

 WLMではオリジナルのアイコンを登録して、絵文字として送信する事が出来ますが、同時に送れる異なる絵文字は5個に制限されているようです。6個以上送信しようとすると、発言自体が蹴られます。

 この為、mihaDiceでグラフィカルダイスを表示する野望が潰えました(;;)。mihaDiceでグラフィカルダイス機能が5d6までに制限されているのはこの為です。

とりあえずここであればファイルを保存出来る(他の所は知らない)

 今の所、%APPDATA%フォルダ配下に、アドインと同名のフォルダを作り、そこのファイルの読み書きが出来ています。当然ながら、フォルダは先にインストーラーなどで予め作っておく必要があるでしょう(リアルタイムで作れるのかどうかは知らない)。あ、Webアクセスやファイル操作は、dllをGACに登録しないと出来ないので注意。

 あと、一度作ったフォルダはロックされるようですが、どのタイミングでロックが設定/解除されるのかわかりません(調べてない)。

アドインは他のアドインの発言を感知出来ない。

 Incoming(OutGoing)TextMessageメソッドで取得出来るのはユーザーの発言だけであり、アドインの発言は取得出来ません。まあ、出来たら無限ループしちゃいますけど^^;。「○○が会話に参加しました」などのあらゆるシステムメッセージも取得不能です。これはアドイン製作者にとっては結構厳しい仕様だと思う〜。

 今作っているアドインはmihaDiceと連携して動作する筈だったのですが、この仕様により、mihaDiceの発言を取得出来ない為、別個のアドインを作るのではなく、mihaDiceの機能を拡張する事にしました。

SendTextMessageは、イベント発生中にしか機能しない。

 「アドインの発言は文字数が一定以上(400byte前後。正確な仕様は不明)になると蹴られる」「SendTextMessageは、発生したイベント内では1回しか実行出来ない」という制限があるため「じゃあキューイングして分割送信しよう」という発想になりましたが、これはNGでした(ドキュメントにも書いてあった)。

ウィンドウを判別する機能は無い

 上と関連してますが、現状(WLM8.1)のアドインの仕様では、複数立っているチャットウィンドウを識別する手段がありません。その為、あるウィンドウでのみ動作するアドイン、という物を作る事が不可能です(誰か分かったら教えて下さい!)。

リビルド後は毎回再起動が必要

 これは確かドキュメントにも書いてありますが、WLMがアドインのDLLをキャッシングしてしまう為、リビルド後はWLMの再起動が必要です。

終わりに

 現状(WLM8.1)のアドインの仕様は、非常に限定的です。そもそも「アドインを有効にする為にはまずレジストリをいじる必要がある」って、敷居が高すぎです^^;。恐らく、オフィシャル的にもアドイン機能は試験的な実装なのではないかと予想します。バージョンアップで、より機能が強化される事を期待しています。

 アドインの作り方その物も、いずれ簡単に書きたいと思っています。まあ、MSDNの英語は簡単なので、直接読んじゃうのも良いと思います。