了解这方面内容的起因是早上有位朋友让我看一段关于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 我们需要的东西都在这里边,简单介绍几个:
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 获取全部用户列表:
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 下面就是将组和用户关联起来:
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 再介绍一下服务:
也是用样道理:
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可用,还是只读的。