Foxtable(狐表)用户栏目专家坐堂 → [求助]OPENQQ接收和发送消息的问题


  共有6963人关注过本帖树形打印复制链接

主题:[求助]OPENQQ接收和发送消息的问题

帅哥哟,离线,有人找我吗?
chnfo
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2247 积分:18514 威望:0 精华:0 注册:2011/11/26 20:21:00
[求助]OPENQQ接收和发送消息的问题  发帖心情 Post By:2022/10/18 17:58:00 [只看该作者]

使用了openQQ,发现有个问题。
1、qqclient接收离线消息的问题。如果服务器离线消息的时间是12:00,但是用户登录的时间是13:00,此时在消息表中看到发送消息是13:00,而不是12:00,这个似乎有点问题。如果希望显示服务器发出消息的时间,而不是转发的时间,该如何处理?
2、在qqclient中定义了一个全局变量CUser,用来获取登录成功时用户的账号。然后在客户端的ReceivedMessage事件中这样写
Dim dr As DataRow = DataTables("信息").AddNew
dr
("接收者") = CUser
dr
("时间") = Date.Now()
dr
("信息") = e.Message

如果是在线,接收者列会显示CUser

但是如果系统先发离线消息,然后客户端再登录,登录成功以后,接收者列会显示空白。
意思是:登录成功的时候,还没有给Cusr赋值,消息就已经接收了?如果希望能给接收者列赋值,该怎么处理呢?
[此贴子已经被作者于2022/10/18 17:59:50编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111390 积分:567014 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/10/18 20:19:00 [只看该作者]

1、我测试没有问题

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

2、是在什么时候给CUser变量赋值的?

 回到顶部
帅哥哟,离线,有人找我吗?
chnfo
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2247 积分:18514 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2022/10/19 8:38:00 [只看该作者]

可能意思没有表述完整。
1、在登录界面的登录时,给全局变量CUser(当前登录账号)赋值
QQClient.ServerIP = "127.0.0.1" '指定服务器IP地址
QQClient.ServerPort = 52177  '指定服务器登录端口
QQClient.UserName = "李桂兰"
QQClient.Password = "888"
CUser = ""  'CUser是预设的全局变量,给登录成功时的账号赋值
If QQClient.Start() = True '如果登录成功
CUser = QQClient.UserName
Else '如果登录失败,显示服务器返回错误信息
   PopMessage("QQClient登录失败,原因:" & vbcrlf & QQClient.ServerMessage,"提示",PopiconEnum.Error,5)
End If

2、不是用内置聊天窗口给用户发信息,而是在QQServer中给用户发信息
QQServer.Send("李桂兰","测试信息",true)  
比如李桂兰离线时,12:00时在QQServer的命令窗口发送此消息,此时服务器的临时数据库中确实是12:00发送消息
而李桂兰在13:00登录系统,此时服务器转发消息
但接收消息的时间显示为李桂兰登录的时间,而且接收用户列是空值。
如果此时再在QQServer的命令窗口发消息,QQServer.Send("李桂兰","测试信息新",true),此时发送消息的时间就是当前时间,这个也不算错误,因为赋值就是date.now。但这个没有什么意义,我是希望得到系统发消息的时间。

我的问题是:
1、为什么登录成功之后,接收的消息,显示的离线消息中,接收用户列是空值。
2、如何获取服务器真正的发出消息的时间?而不是date.now。因为那样,员工有理由说,我没有登录系统,我不知道要我做什么事。系统是刚才发消息给我的,不能算我延误工作。如果显示的是系统发消息的时间,那在工作时间内不登录那就是员工的事了

[此贴子已经被作者于2022/10/19 8:53:31编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111390 积分:567014 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/10/19 8:52:00 [只看该作者]

1、换种方式

……
QQClient.UserName = "李桂兰"
QQClient.Password = "888"
CUser = "李桂兰"  'CUser是预设的全局变量,给登录成功时的账号赋值
If QQClient.Start() = True '如果登录成功
Else '如果登录失败,显示服务器返回错误信息
CUser = ""
   PopMessage("QQClient登录失败,原因:" & vbcrlf & QQClient.ServerMessage,"提示",PopiconEnum.Error,5)
End If

2、代码使用的【dr("时间") = Date.Now()】赋值,当然就是当前电脑时间了,ReceivedMessage事件并没有发送时间的参数,我反馈一下,看能不能加上

 回到顶部