Visual Basic中调用MSN 6.2 API函数


  了解这方面内容的起因是早上有位朋友让我看一段对于MSN开发程序,现在 无奈运行,我 打 动工程发现是针对4.7编写的,而他的计算机安装的6,2,由于我也用6.2所以我在VB中查看了一下,发现是 缺乏Messenger Type Library 。然而多了Messenger API Type Library,可能是做为Messenger Type Library的 代替,然而发现它的 性能不如以往的Messenger Type Library 全面,起码我现在就发现它不能 批改当地的MyFriendlyName,不清楚为何把它弄成只读的,MyStatus是可写 。

  下面 方便用VB 间隔 注明怎么调用它:

  首先固然是 引用对象Messenger API Type Library了 。

   而后申明一个对象MessengerAPI.Messenger:

bgColor=#e1e1e1 border=1>
Private WithEvents oMSN As MessengerAPI.Messenger

  我们需求的东西都在这里边, 方便介绍几个:

  MyContacts:IMessengerContacts 对象

  MyFriendlyName: 目前的昵称

  MyGroups: IMessengerGroupss对象

  MyPhoneNumber:返回电话号码

  MyProperty:现在没有 使用

  MyServiceId :返回Service id应该是{9b017612-c9f1-11d2-8d9f-0000f875c541}]

  MyServiceName:返回Service name应该是 .NET Messenger Service

  MySigninName:返回目前的签名,eMail地址

  MyStatus:返回目前状态,MISTATUS枚举值

  其实当地属性和通过PrimaryService得到的一样

  做几个 方便的演示:

  首先是登陆演示, 使用MessengerAPI.Messenger的 SignIn 或者AutoSignin 步骤:

bgColor=#e1e1e1 border=1>
Public Sub SignIn(ByVal bAuto As Boolean, Optional ByVal sSignInName As String,   Optional ByVal sPassword As String)

 On Error GoTo ErrorHandle

 If bAuto = True Then

  oMSN.AutoSignin

 Else

  ManualSignIn:

  oMSN.SignIn 0, sSignInName, sPassword

 End If

 Exit Sub

ErrorHandle:

 Dim MConstants As MSGRConstants

 MConstants = err.Number

 If MConstants = MSGR_E_FAIL Then

  GoTo ManualSignIn

 ElseIf MConstants = MSGR_E_ALREADY_LOGGED_ON Then

  '已经登陆

 End If

End Sub

  猎取所有消费者列表:

  通过Messenger的MyContacts对象(它是只读的)

  它其实便是一个IMessengerContacts对象,而IMessengerContacts类又是IMessengerContact类的一个 集中,在IMessengerContact中 保留 联络人信息 。

   因此 可以这样遍历 联络人 。

bgColor=#e1e1e1 border=1>
Dim oContacts As IMessengerContacts

Dim oContact As IMessengerContact

Dim iCount As Integer

Dim i As Long

Set oContacts = oMSN.MyContacts

iCount = oContacts.Count

For i = 0 To iCount - 1

 Set oContact = MsgrContacts.Item

 List1.AddItem MsgrContact.FriendlyName & vBTab & "(" & getStatusDesc(MsgrContact.Status) & ")"

Next

  getStatusDesc函数用来返回状态文本 形容:

bgColor=#e1e1e1 border=1>
Private Function getStatusDesc(eStatus As MISTATUS) As String

 Select Case eStatus

  Case MISTATUS_AWAY

   getStatusDesc = "走开了"

  Case MISTATUS_BE_RIGHT_BACK

   getStatusDesc = "即将回来"

  Case MISTATUS_BUSY

   getStatusDesc = "在 繁忙"

  Case MISTATUS_IDLE

   getStatusDesc = "在 发呆"

  Case MISTATUS_INVISIBLE

   getStatusDesc = "隐身"

  Case MISTATUS_LOCAL_CONNECTING_TO_SERVER

   getStatusDesc = "正在链接服务器"

  Case MISTATUS_LOCAL_DISCONNECTING_FROM_SERVER

   getStatusDesc = "从服务器断开"

  Case MISTATUS_LOCAL_FINDING_SERVER

   getStatusDesc = "正在查找服务器"

  Case MISTATUS_LOCAL_SYNCHRONIZING_WITH_SERVER

   getStatusDesc = "正在和服务器同步"

  Case MISTATUS_OFFLINE

   getStatusDesc = "离线"

  Case MISTATUS_ON_THE_PHONE

   getStatusDesc = "在接电话"

  Case MISTATUS_ONLINE

   getStatusDesc = "在线"

  Case MISTATUS_OUT_TO_LUNCH

   getStatusDesc = "外出就餐"

  Case MISTATUS_UNKNOWN

   getStatusDesc = "未知"

 End Select

End Function

  猎取组列表:

   步骤同猎取 联络人,只不过换了一下对象.

bgColor=#e1e1e1 border=1>
Dim oGroups As IMessengerGroups

Dim oGroup As IMessengerGroup

Set oGroups = oMSN.MyGroups

For Each oGroup In oGroups

 List1.AddItem oGroup.Name

Next

  下面便是将组和消费者关联起来:

  清楚上面的 步骤,这个很方便实现,IMessengerGroup类的对象中含有IMessengerContact类对象的 集中 。

bgColor=#e1e1e1 border=1>
Dim oGroups As IMessengerGroups

Dim oGroup As IMessengerGroup

Dim oContacts As IMessengerContacts

Dim oContact As IMessengerContact

Set oGroups = oMSN.MyGroups

For Each oGroup In oGroups

 Set oContacts = oGroup.Contacts

 For Each oContact In oContacts

  List1.AddItem oGroup.Name & " " & oContact.SigninName

 Next

Next

  在介绍一下服务:

  也是用样 情理:

bgColor=#e1e1e1 border=1>
Dim oServices As IMessengerServices

Dim oService As IMessengerService

Set oServices = oMSN.Services

Set oService = oServices.PrimaryService

MsgBox oService.MyFriendlyName & getStatusDesc(oService.MyStatus) & oService.MySigninName & oService.ServiceId & oService.ServiceName

  我现在怎么感觉PrimaryService的 意思不大,IMessengerServices中就一个PrimaryService可用,还是只读的 。

  固然各个对象可能还有一些相应的 步骤就不多介绍,我介绍的这些通过对象阅读器就 可以看清楚,其中还有对象或成员我现在还没学会 使用,现在只不过 大体了解一下,我 盼望看到这篇文章的人也有了丝毫初步了解 。