JDBな人生  専門的なことから日常的なことまで~ まぁ自由きままに書いていきます。
2017年10月 / 09月<< 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 >>11月

アクセスランキング

[ジャンルランキング]
コンピュータ
265位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
35位
アクセスランキングを見る>>

VB.NETからSkypeチャットを送受信してみる【続報】

久々にVB.NETでちょっとしたツールを作っています。
今回は、SKYPE4LCOMLibというAPIを通してSkypeを操作する方法について、簡単に記事を書こうと思います。


APIが廃止されたため、現在ではこの方法を使うことはできません。
Microsoftが何か対応してくれることを願いましょう…

導入)

Skype Developer - Desktop API (Accessories)
http://dev.skype.com/accessories

自作プログラムからSkypeを操ろう! - toriimiyukkiの日記
http://d.hatena.ne.jp/toriimiyukki/20100716/1279281599

色々と調べてみましたがチャット関連の情報が少ないようなので、この記事ではチャット中心に書きます。

Skypeのインスタンス化
Skype = New SKYPE4COMLib.Skype

'この時点でSkypeが起動していないと操作不可。7はSkypeのプロトコルのバージョン
Skype.Attach(7, False)

※Skypeの状態の確認
Skype.Client.IsRunning
ブール値です。まあこれは適宜チェックを行えばよいかと。


このAPIでは、取得したチャットオブジェクトをもとに操作を行います。
ということで、目的のチャットオブジェクトを探す関数をいくつか書いてみました。

IDからチャットオブジェクト(個人)の取得
Function GetChatUser(ByVal ID As String) As SKYPE4COMLib.Chat
    For Each e As SKYPE4COMLib.Chat In Skype.Chats
        If e.DialogPartner = ID Then
            Return e
        End If
    Next
    Return Nothing
End Function


表示名からチャットオブジェクト(個人)の取得
Function GetChatUserByName(ByVal Name As String) As SKYPE4COMLib.Chat
    For Each e As SKYPE4COMLib.Chat In Skype.Chats
        If e.Topic = "" Then
            For Each u As SKYPE4COMLib.User In e.ActiveMembers
                If u.FullName = Name Then
                    Return e
                ElseIf e.FriendlyName = Name And e.ActiveMembers.Count = 1 Then
                    Return e
                End If
            Next
        End If
    Next
    Return Nothing
End Function

グループチャットの名前から取得
Function GetChatRoom(ByVal Name As String) As SKYPE4COMLib.Chat
    For Each e As SKYPE4COMLib.Chat In Skype.Chats
        If e.Topic = Name Then
            Return e
        End If
    Next
    Return Nothing
End Function


※なお、すべてのチャットの取得はSkype.Chats、アクティブなもののみ対象であればSkype.ActiveChatsにて可能です。

≪チャットの送信≫
送信は取得したチャットオブジェクトからSendMessageメソッドを呼び出して行います。
Dim c As SKYPE4COMLib.Chat = GetChatUser("echo123")
c.SendMessage("メッセージ本文")


≪チャットの受信≫
こちらはMessageStatusイベントを利用します。なお、WithEventsキーワードの記述も行っておいてください。
'クラスの宣言直後に
Private WithEvents Skype As SKYPE4COMLib.Skype

Sub GotMessage(ByVal Msg As SKYPE4COMLib.ChatMessage, ByVal Status As SKYPE4COMLib.TChatStatus) Handles Skype.MessageStatus
    Console.WriteLine(Msg.Body)
End Sub


こんな感じです。
公式のリファレンスが少し読みにくいですが、APIの構造は比較的わかりやすいので勘で書いてもなんとかなるような気もします。

今作っているツールの公開はまだ考え中ですが
公開するときには、また記事を一つ書こうと思います。

#最近は記事への質問も受け付けています。何かあったらお気軽にー
 


 
   VB.NET    TB(0)    CM(0)    EDIT    ページ↑

コメント投稿


 管理者だけに表示

コメント

トラックバック

この記事へのトラックバック:

プロフィール

JDB Luigi

Author:JDB Luigi
どこにでもいるようなありふれた人間・・・という訳でもなく、かと言って怪しい宗教を信仰する変人という訳でも無い。

基本的に掲載しているコード等は煮ていただいても焼いていただいても結構ですが、利用は自己責任にてお願いいします。
また、バグ・アドバイス等もしあればよろしくお願いします。

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。