手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>VB>列表

Visual Basic中调用MSN API函数

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
  了解这方面内容的起因是早上有位朋友让我看一段关于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。

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方法:

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中保存联系人信息。

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

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函数用来返回状态文本描述:

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
  获取组列表:

  方法同获取联系人,只是换了一下对象.

Dim oGroups As IMessengerGroups
Dim oGroup As IMessengerGroup
Set oGroups = oMSN.MyGroups
For Each oGroup In oGroups
 List1.AddItem oGroup.Name
Next
  下面就是将组和用户关联起来:

  明白上面的方法,这个很容易实现,IMessengerGroup类的对象中含有IMessengerContact类对象的集合。

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!