Visual Basic中调用MSN API函数
[
2008-7-30 22:53:00
| 发表者 :
zihe
]
了解这方面内容的起因是早上有位朋友让我看一段关于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可用,还是只读的。
当然各个对象可能还有一些相应的方法就不多介绍,我介绍的这些通过对象浏览器就可以看明白,其中还有对象或成员我现在还没学会使用,现在只是大致了解一下,我希望看到这篇文章的人也有了一点初步了解。
上一篇:
用Visual Basic实现undo功能 下一篇:
一些关于adodb的知识