DotCat

喜欢技术,喜欢简单,喜欢猫

导航

当你聊天你会想起谁--Vista Sidebar Gadget DIY

看到有vista的sidebar gadget的比赛,早就心痒痒了,但是一开始论文压倒一切,没功夫给头脑来个风暴想想what to do,中间网络又抽风,没资源让我看看How to do,最后人偏懒,一会儿瞎忙活,一会儿耍摆起,没心情静下来整整程序.盖茨保佑,总算在我即将答辩,溜之大吉之前完成了一个小小的程序--当你聊天你会想起谁.程序尚在审批之中,还没列在作品展示中,因为简陋而匆忙,得奖就不奢望了,这次真的督促自己践行了一把"重在参与".

把思路理一理吧,最初设想蛮简单的:根据Windows Live Messenger聊天历史记录
P0: (1)按最近聊天和最多聊天排序显示联系人.(2)显示联系人当前在线状态
P1: (3)能通过点击图标直接打开聊天窗口
P2: (4)分析聊天历史,以类似outlook calendar的直观图形方式显示用户及其联系人在不同时段的昵称
P3: (5)对不同联系人的聊天字数提供图形化的统计结果

功能(1)比较容易,让用户来配置聊天历史记录目录,分析其下文件就行.但是聊天历史记录的文件名是在联系人的Email前綴(用户名)加了9或10个哈希数字而得的,所以联系人的Email还不得而知,这样功能(3)无法实现.至于如何通过点击就能打开聊天窗口,粗粗设想考虑了2个方案:
(a)记得以前windows messenger的exe中有Messenger Client的API,我可以调用它从而每次从服务器获取联系人信息
(b)记得以前Hotmail等网站上用某些ActiveX控件可以显示联系人的在线状态,配合msnim:chat?contact=...语法即可实现功能(2)

调研后发现(a)的API已经不再支持了,windows server 2003, vista不自带windows messenger,没有试验原来的API还是否可以运行,决定弃用方案(a),而且我的注册表里和现在的live系列网站上都找不到原来的HotmailControl等ActiveX了,诡异!估计微软处于安全考虑不打算再使用这些ActiveX了,山穷水尽疑无路,柳暗花明又一村,又看到2个方案:
(c)msdn上另外的API:MessengerClient
(d)微软推出个Windows Live Contacts Control Beta v2d,看了介绍,似乎直接利用该控件再加点对聊天记录的分析就大功告成,

再调研后发现MessengerClient主要是针对插件开发,体系结构不允许gadget这样调用,而且功能也不包括获取联系人列表.地震之后,Windows Live Messenger Service和Presence Service太不稳定了,Windows Live Contacts Control打开100次才能连上一次,而且1分钟就断了,几乎没法用.

拖了太久,无心恋战,于是想先实现部分功能吧,就先瞄准了功能(1)和(3),在微软提供的vem empty示例代码基础上开始修改.让用户在WLM上导出自己的联系人列表,再在gadget里配置一下,这样在联系人Email和其聊天记录文件中做个简单的映射.

支持系统: Vista
支持语言: 中英文
使用步骤
:
[1]从这里或稍后在比赛网站下载,如果是.rar格式,则须解压为gadget后缀的文件,然后双击安装.得下图

[2]点击上图中红圈所示图标,如下进行两步设置.


已知问题:
[1]点击联系人用户名或其前的图标时,打开聊天窗口的同时会在浏览器中打开一个新窗口,比较土,还没想到解决办法.
[2]如果在导出联系人列表后与以前从未聊天的联系人聊天,则gadget无法找到该联系人的Email信息,从而不能打开聊天窗口.而且显示该联系人用户名也只能根据聊天记录文件名,可能会多一位数字.
[3]理论上有将联系人Email和其聊天记录文件映射错误的可能


后话:虽然这个功能很微小,但后来发现还其他人有类似想法呃,http://gallery.live.com/results.aspx?c=3&l=1
,其中Compact messenger我没有运行成功,看代码用到了一个ActiveX,推测是我的电脑上新版本的WLM没有这个ActiveX导致.Cener Live Messenger Gadget跑得不错,看了代码,一看connector目录有个MSNMessengerAPI.dll,我就明白了,人家不嫌麻烦地自己带了API呃,虽然后向兼容性有所隐患,简化版的Messenger总算做得到家,如果我用这个技术也不至于手脚受限,功能弱弱.

posted on 2007-02-05 23:59  DotCat  阅读(764)  评论(2编辑  收藏  举报