了解这方面内容的起因是早上有位朋友让我看一段关于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类对象的集合。
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可用,还是只读的。
当然各个对象可能还有一些相应的方法就不多介绍,我介绍的这些通过对象浏览器就可以看明白,其中还有对象或成员我现在还没学会使用,现在只是大致了解一下,我希望看到这篇文章的人也有了一点初步了解。
打印 | 张贴于 2004-06-11 13:10:00 | Tag:暂无标签
留言反馈
xiangxubing-1@163.com
先谢谢了
wangjn163@163.com
chienliang.yang@gmail.com
能够把下载API地地址给我,或者发一份给我
加我msn也可以
thebluesoul@hotmail.com
谢谢了
5azp@163.com
能给我也发一份吗?谢谢!
索要msn接口的文档,谢谢了
有相关的资料的话也希望提供,谢谢
需要一份msn接口文档谢谢
sarrary@sohu.com
多谢啦!!!
cdlister@gmail.com
多谢啦!!!
lina0617@gmail.com
thx!!
bibol.wu@gmail.com
感謝萬分! :)
AA_SOFT@163.com
qikersa@163.com
aro99@163.com
不知道怎么做,能帮我给一份看一下吗?谢谢了 xinwei586@163.com
trumpetkuo@hotmail.com
simoonchen@hotmail.com
还有,MSN API可以在NET上用吗?
leikiliu@gmail.com
mzjsc@china.com
0nsisn0@gmail.com
hebingwu@hotmail.com
linkaichie@gmail.com
我的的email:bbai1979@hotmail.com
jyc@cntomorrow.com
怎么搞啊,那里有这个玩意。
给我发一封好吗?
谢谢。
wxwyes@126.com
谢谢了.
yurer@msn.com
tinytony32@hotmail.com
我想问问是引用的哪个API
yurer@msn.com
看楼上的评论说现在的MSN API只有Com接口?MSN7.5是否支持这个接口?
pentel_liu@hotmail.com
pentel_liu@hotmail.com
给我发一份,谢谢!srw962@mail.csdn.net
ljhuacn@yahoo.com.cn
ada9922@gmail.com
hua_flower@hotmail.com
iamjimtw@gmail.com
xiao_john@sina.com.cn
wenky2@163.com
howard@ms23.url.com.tw
謝謝!
或者: ycj_first@163.com
需要的给我发邮件wangls@cape.com.cn
可以封装成active x控见
MessengerAPI.Messenger的InstantMessage方法,他是打开发送消息的窗口,比如
Set MsgrContact = MsgrContacts.Item(128)
If MsgrContact.Status = MISTATUS_ONLINE Then
objMessenger.InstantMessage MsgrContact
DoEvents
SendKeys "test"
DoEvents
SendKeys "{enter}"
DoEvents
SendKeys "%{F4}"
End If
新版的msn的com借口比原来的东西少得多
以前的msn协议是开放的,后来也开始不开放了
ms的msn战略发生变化了
我在VB6下写的!我没发现他有.net Assembly只包含四个com对象
//msnmsgr.exe
//Messenger Private Type Library
//Version: 1.0
MessengerPrivate;
GUID = {53CED51D-432B-45B2-A3E0-0CE2C24235D4};
//msnmsgr.exe/2
//Messenger API Type Library
//Version: 1.0
MessengerAPI;
GUID = {E02AD29E-80F5-46C6-B416-9B3EBDDF057E};
//msnmsgr.exe/3
//Messenger Dispatch Implementation
//Version: 1.0
DispImpl;
GUID = {9071135F-52C4-4D38-A787-2C5367CB5075};
我提到的是Messenger API Type Library(msnmsgr.exe/2)
但是如果在.net用这个Com组件那么和VB6就应该差不多了
最起码可以改状态.