QQ是如何实现好友桌面快捷方式的?

简介: 不知道什么时候,QQ推出了好友桌面快捷方式,方便用户和最常保持联系的好友一键联系。

不知道什么时候,QQ推出了好友桌面快捷方式,方便用户和最常保持联系的好友一键联系。核心功能一:若QQ启动了,则双击快捷方式直接打开好友聊天界面;核心功能二:若QQ未启动,则双击快捷方式后启动QQ后打开好友聊天界面。但其是如何实现的呢?让我们一起挖一挖。

一、QQ好友桌面快捷方式操作演示

image.png

image.png

image.png

直接上图,很明了,不过多解释。

二、QQ好友桌面快捷方式的Windows实现

image.png

上图是桌面好友快捷方式的几个关键属性,解析如下:

1)、目标——关联的进程,快捷方式无非是可执行程序的快捷链接。给QQ.exe进程创建快捷方式展开属性发现,目标位置内容为:C:Program FilesTencentQQQQProtectBinQQProtect.exe

这就是QQ的核心进程。而对比好友快捷方式的目标位置内容为:

C:ProgramFilesTencentQQBinQQScLauncher.exe" /uin:*/quicklunch:096275A1A8 3DC509B82E14BEE49552 98B7C1FF2235EB054520E6686E1353FA8ED7219F5CC4213B89

组成结构为:启动关联进程/自己的QQ号/标识好友信息的80个16进制值。该组成即是快捷方式能实现与好友直接互联的核心。

2)、打开文件位置——EXE进程的路径即QQScLauncher.exe的安装路径。

3)、更改图标——图标的存储路径,即是好友的头像图标的存储路径,如下图所示:

image.png

基本断定为32位MD5值.ico的形式存储的好友头像。

Windows下实现桌面快捷方式需要用到两个COM接口IShellLink和IPersistFile的部分函数。

1)设置目标:HRESULT SetPath(LPCTSTR pszFile);    

2)更改图标: HRESULT SetIconLocation(LPCTSTRpszIconPath,int iIcon);

3)保存快捷方式:HRESULT Save( LPCOLESTRpszFileName, BOOL fRemember);

三、QQ好友桌面快捷方式的实现流程

个人推断的大致流程如下:

image.png

第1步:实现QQScLauncher.exe与QQProtect.exe的通信。

QQProtect.exe负责多用户QQ的登录,而QQScLauncher.exe需要通过QQProtect.exe得知当前创建桌面快捷方式的好友的QQ号是否已经启动

1)如果QQ没有启动,则调用QQProtect.exe启动QQ而后打开好友界面;

2)如果QQ启动了,则直接打开好友页面。

两进程之间可以通过共享内存方式实现通信。

第2步:下载QQ好友图像存储到安装路径下。       

存储路径为C: UsersAdministratorAppDataRoamingTencentQQMiscShortcuts。为好友创建桌面快捷方式提供图标支持。QQ不可能将每个QQ好友的图标都下载到临时存储目录下,那样的话存储和处理都是问题。只是会在需要的时候才会存储。图标的下载可以通过类似URLDownloadToFile ()的接口实现。

第3步:通过COM接口IShellLink和IPersistFile的实现创建好友桌面快捷方式。详细函数参见第二部分。

四、测试好友桌面快捷方式效果回馈

第1点

如果创建了好友的桌面快捷方式,即使我们人为手动更换了名称。如“1234.lnk”改为“5678.lnk”,但是点击删除桌面快捷方式,仍然能够删除。前提是好友快捷方式必须还在桌面路径如C:UsersPublicDesktop上。是什么标示了该快捷方式的唯一性?尚不知道。

第2点

如果我们人为删除了好友桌面快捷方式,右击好友仍会出现“生成桌面快捷方式”;但是一旦我们生成了桌面快捷方式,右击好友只会出现“删除桌面快捷方式”。该功能实现的细节很到位。

这只是QQ实现的一个小功能,仔细留意,这些小功能都极大的方便了我们大众用户的操作。也为我们开发人员提供了很好的借鉴和参考。

       

作者:铭毅天下

转载请标明出处,原文地址:http://blog.csdn.net/laoyang360/article/details/24503161

相关文章
|
5月前
|
缓存 前端开发 芯片
南京观海微电子---AXI总线技术简介——ZYNQ PS和PL的互联技术
AXI是Xilinx ZYNQ系列中实现ARM与FPGA高速通信的核心协议,支持Lite、4和Stream三种总线,分别适用于控制、批量传输和数据流场景。通过AXI Interconnect实现多设备互联,结合DMA等IP核,可高效完成数据交互,广泛应用于嵌入式系统开发。
南京观海微电子---AXI总线技术简介——ZYNQ PS和PL的互联技术
|
7月前
|
机器学习/深度学习 数据采集 存储
概率神经网络的分类预测--基于PNN的变压器故障诊断(Matlab代码实现)
概率神经网络的分类预测--基于PNN的变压器故障诊断(Matlab代码实现)
1052 0
基于FOC控制器的BLDC无刷直流电机控制系统matlab编程与仿真
本课题基于MATLAB编程实现BLDC无刷直流电机的FOC控制系统,涵盖FOC控制器、Clarke和Park变换等,不使用Simulink建模。系统通过坐标变换将三相电流转换到dq轴,独立控制励磁和转矩电流,实现高效平滑运行及高动态响应。仿真输出包括三相电流、电机转速和转子角度。版本:MATLAB2022a。
|
人工智能 算法 程序员
揭秘 AI 编程工具的费用真相:2025 年开发者视角-优雅草卓伊凡
揭秘 AI 编程工具的费用真相:2025 年开发者视角-优雅草卓伊凡
753 1
揭秘 AI 编程工具的费用真相:2025 年开发者视角-优雅草卓伊凡
|
人工智能 自然语言处理 人机交互
询问ChatGPT对于多模态知识图谱的理解,以及如何构建一个多模态知识图谱?
询问ChatGPT对于多模态知识图谱的理解,以及如何构建一个多模态知识图谱?
53061 0
|
消息中间件 存储 运维
为什么说Kafka还不是完美的实时数据通道
【10月更文挑战第19天】Kafka 虽然作为数据通道被广泛应用,但在实时性、数据一致性、性能及管理方面存在局限。数据延迟受消息堆积和分区再平衡影响;数据一致性难以达到恰好一次;性能瓶颈在于网络和磁盘I/O;管理复杂性涉及集群配置与版本升级。
643 1
|
数据可视化 图形学 Python
|
Linux 网络虚拟化
Centos 7 环境实现内网服务访问2
Centos 7 环境实现内网服务访问
699 0
|
前端开发 定位技术 数据格式
GeoServer使用CSS渲染地图
CSS Style是GeoServer的一个扩展插件,使用CSS写起来的地图渲染策略文件相比较SLD而言,非常的简洁,本文根据GeoServer用户手册,稍微改写,便于该知识点的推广。
1635 0
|
人工智能 Java 测试技术
测试人员如何提升自己的测试技能?
测试人员如何提升自己的测试技能?
778 0

热门文章

最新文章