时隔六年,为了女神我重新操起VB6.0,只为了给 RTX 写个简单的插件

陪她去流浪 桃子 2016年05月10日 编辑 阅读次数:4166

事出有因

不知道为什么,最近两个月女神突然不跟我一起等车了(不是跟我一起,只是偶遇,是我想得太美好)。

接连两个月都没有了女神的一点动态,很不开心。无意间发现 RTX 上有一个“关注联系人状态”功能,尝试用了一下,发现它只有“上线提醒”,没有“离线”提醒。而且它那个提醒是在屏幕的右下角弹出一个提示窗口,过几秒钟后就会消失,而且这样的话,同事有能看到我有关注某人,这样有点不雅。更甚的是,如果我当前不在电脑旁,那就是不知道对方的具体的上线/离线时间的,这还算个屁的关注,我要关注到每分每秒!

寻求解决方案

于是,我跑到 RTX 的官方网站找插件开发文档,找到一个名叫“RTXClientSDKHandbook.chm”的 RTX 客户端二次开发/插件文档。文档内容很少,具体了解了一下。

RTX 是以 COM 的方式提供接口的。其插件主要用 C++ 开发,用来扩展 RTX 的功能。但通过其自带的例子程序是用 VB6.0 来开发的。而且代码看起来非常简单。最开心的是,自带的例子就有我需要的功能:监听用户在线状态改变。当前选择 VB6.0 了,后面还有更充分的使用 VB6.0 的理由。

善事利器

先作个回忆,想想看,自从高二那年我开始学C语言后,就再也没有动过VB6.0了,到现在大概已经六年了,不知道还能不能写VB6.0的代码。管它的呢!上!

这下一发而不可收了,我立马从网上直接搜索并下载了“VB6.0精简版”神器,说神器的原因是这玩意儿安装包仅有 6M 大小,但是却有着开发普通程序的全部功能,真可谓小巧精悍。真是666。

几秒钟安装完,立即启动,结果在我的 Win10 上直接崩溃,换成管理员模式后成功打开。熟悉的界面,飞一般的速度,久违的感觉!

开心编码

先按照文档说明,新建了一个 EXE 工程。

添加引用。在 VB6.0 菜单中,选择“工程(Project)” -> “引用(References)”,勾选 RTXCModuleInterfaces, RTXCAPI 和 RTXAX 三个引用。如下图。

接下来就是编码了。

VB6.0 在新建工程后会默认建立一个窗口文件。双击该窗体文件,进入代码编写。

首先,需要定义一个 Presense 对象类型,此对象用户接收用户状态改变事件。

' RTX用户状态改变接口
Dim WithEvents Presence As RTXCAPILib.RTXCPresence

这玩意儿就只有一个接口函数,状态改变事件回调。

' RTX用户在线状态改变回调
Private Sub Presence_OnPresenceChange(ByVal Account As String, ByVal RTXPresence As RTXCAPILib.RTX_PRESENCE)
    MsgBox Account & ": " & RTXPresence
End Sub

其中的 Account 既是当前发生状态的用户名(不是RTX数字账号,也不是昵称,也不是邮箱),是下图的那个 “Hunter” 字段的值,

,RTXPresence 是一个枚举值:

enum RTX_PRESENCE
{
  RTX_PRESENCE_OFFLINE  = 0,    // 离线 
  RTX_PRESENCE_ONLINE   = 1,    // 在线
  RTX_PRESENCE_AWAY     = 2,    // 离开
};

,有了这个状态改变回调函数,我需要获取的信息就全部可以拿到了。现在来补充完整代码。

在窗体的“加载”事件中绑定 Presense 对 RTX 的 Presense 对象:

' 主窗体加载时
Private Sub Form_Load()
    ' RTX用户在线状态对象
    Set Presence = CreateObject("RTXClient.RTXAPI").GetObject("kernalRoot").Presence
End Sub

Ok了,上面已经是能实现监听用户状态改变的完整能用的例子了。已经可以跑了,试试吧。

几行代码?反正没有十行,有没有体会到 VB6.0 的小巧精悍?如果你换成用 C++ 来开发的话,估计塔环境都得搞死人。头文件引用,类型库导入,反正我是不敢想像,至少和使用 VB6.0 对比起来要繁琐许多。

当然了,上面的代码还需要完善。比如,除了女神外,其它我并不关心。所以我得加个用户列表过来过滤掉他们了。下面就是完整版。

完整版本

截个图,现在的完整版本像下面这样:

“User”栏是用户名的别名(后面会说明),“Status”是当前状态(在线,离线,离开),“Time”是最后一次状态改变的时刻。

还有一组按钮。第1个是手动刷新,我不知道为什么提供一个手动刷新的按钮,反正就是提供了;第2个是日志窗口(见上右图);第3个是窗口隐藏按钮;第4个是退出按钮。

用户列表的用户名从 EXE 所在目录的 users.txt 中加载,一行一个,格式为:“RTX账号,别名”。

状态日志会自动保存到 EXE 所在目录下的 status.log 文件中,追加记录。

程序运行后会在托盘区域创建托盘图标。双击左键显示窗体,单击右键隐藏窗体。

收到状态改变通知时,图标会闪烁。鼠标放上去会有最近一次状态改变的日志提示。

附加功能

经研究文档,发现了可以调用发送消息的接口。于是把此功能也加上了。此功能与文档初衷不相关,我不多作介绍。

文档与源代码

开发所用到的文档请自行到 RTX 的官网上面去下载。

工程源代码全部开放,托管在 GitHub 上:https://github.com/movsb/rtx_for_celery.git

Celery是谁?废(hui)话(fa)!

六年没写 VB6.0 的代码了,花了一个通宵才写出来。质量如何,不好说。:-)

注意事项

不要介意我取了这么一个专用的程序名字。

不要过分吐槽我的代码逻辑,那是一个六年没写代码的写的。

VB6.0 可能需要以管理员的方式启动。

请保持此程序的权限跟 RTX 相同,否则可能启动后无法显示窗体。

程序中几乎没作接口方面的容错处理,请确保 RTX 已安装。。。

程序无法启动,缺少文件,请自行搜索下载。

接下来

不要干坏事。

标签:我的小项目