一昨日、クラスの友達が面白半分に、Yahoo! Messenger のステータスを変えるいたずらプログラムを送り合い始めました。それがきっかけで、このステータスいたずらプログラムの発展版を作ってみようというひらめきを得ました。Yahoo! Messenger のステータスを変更するプログラムを作るのは、実はそれほど難しくありません。Yahoo が Messenger を簡単に設定できる COM コンポーネントを提供しているからです。この COM は YahooMessengerLib と呼ばれ、私の知る限り、Yahoo! Messenger に対して次の操作ができます:ステータスの変更、現在のステータスの取得、Yahoo! Messenger へのログインまたはログアウト。それでは、YahooMessengerLib という COM コンポーネントの使い方を紹介しましょう~

以下では VB.NET を使って解説しますが、YahooMessengerLib コンポーネントは VB.NET だけでなく、ほかの言語からも利用できます(例:VB6、VC++)。

一.YahooMessengerLib をプロジェクトに追加する

1.【Windows Form アプリケーション】のプロジェクトを新規作成し、【プロジェクト】→【参照の追加】の順にクリックします。

2.【COM】タブを選択し、Yahoo! Messenger TypeLib を選んで【OK】をクリックすると、Yahoo! Messenger TypeLib がプロジェクトに追加されます。

P.S. Visual Studio の各バージョンでも手順は同じです。

二.YahooMessengerLib で Yahoo! Messenger にアクセスする

Yahoo! Messenger TypeLib をプロジェクトに追加できたら、次はもちろん、それを制御するコードを書きます。
  1. コードエディターを開き、一番上に次のコードを追加して、Yahoo! Messenger TypeLib を参照します:
Imports YahooMessengerLib
  1. 次に、Public Class フォーム名 の下に次のコードを追加して、Messenger2 オブジェクトを作成します:
Dim message As New Messenger2

  1. 次に、フォームに Button を1つ追加し、Button の下に次のコードを書きます:
message.Me.Status.SetCustomStatus("你想打得狀態", 0, DBNull.Value, DBNull.Value)

VB6 の場合、ここのコードは次のようになります:

message.Me.Status.SetCustomStatus("你想打得狀態", 0, Null, Null)

上のコードで Yahoo! Messenger のステータスを変更できます。message は手順2で宣言したオブジェクトです。SetCustomStatus の2番目の引数は、空き中か取り込み中かを設定するもので、0 が空き中、1 が取り込み中です。ステータスの設定以外にも、さまざまな使い方があります。以下は、私が現在知っている使い方の一部です:

message.Login()                     'Yahoo! Messenger のアカウントとパスワードを保存している場合は、このメソッドで直接ログインできます
message.Logout()                    'Yahoo! Messenger からログアウトします
message.LoginUser("帳號", "密碼")    '指定したアカウントとパスワードでログインします
message.Me.status.message()         '現在 Yahoo! Messenger に設定されているステータスを取得します

P.S. このプログラムを実行したときに Yahoo! Messenger のメインプログラムが起動していないと、エラーになります。そのため、先に Yahoo! Messenger が起動しているかを確認するか、メインプログラムを先に起動してから他のコードを実行することをおすすめします。

サンプルコード

プロジェクトファイルのダウンロード:Xun6 | 4Shared| Box.net

Imports YahooMessengerLib

Public Class Form1
    Dim message As New Messenger2

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Try
            Label4.Text = message.Me.status.message()         'Yahoo! Messenger に設定されているステータスを取得
        Catch er As System.NullReferenceException   'Yahoo! Messenger が開いていないときのエラーメッセージ
            MsgBox("即時通沒有開啟或登入")
        End Try
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        message.Login()                     'Yahoo! Messenger のアカウントとパスワードを保存している場合は、このメソッドで直接ログインできます
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        message.Logout()                    'Yahoo! Messenger からログアウトします
    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        message.LoginUser(TextBox1.Text, TextBox2.Text)   '指定したアカウントとパスワードでログインします
    End Sub

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        Try
            message.Me.Status.SetCustomStatus(TextBox3.Text, 0, DBNull.Value, DBNull.Value)     'Yahoo! Messenger のステータスを設定
        Catch er As System.NullReferenceException       'Yahoo! Messenger が開いていないときのエラーメッセージ
            MsgBox("即時通沒有開啟或登入")
        End Try

    End Sub

End Class

先ほど、いたずらプログラムの発展版も作ったとお伝えしました。その違いは、他人のステータスを遠隔操作できる仕組みを加えたことだけです。仮想ホストに TXT ファイルを置き、プログラムがその TXT ファイルの内容を読み込んでステータスとして表示するようにしています。さらに、TXT ファイルの内容を書き換える PHP プログラムも書きました。このプログラムのソースコードは、以下からダウンロードできます:

4Shared | Box.net | Xun6