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

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

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

      

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

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

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

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

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

C:\ProgramFiles\Tencent\QQ\Bin\QQScLauncher.exe" /uin:*********/quicklunch:096275A1A8 3DC509B82E14BEE49552 98B7C1FF2235EB054520E6686E1353FA8ED7219F5CC4213B89

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

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

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

基本断定为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好友桌面快捷方式的实现流程

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

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

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

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

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

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

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

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

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

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

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

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

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

2014-4-26 pm0:40 思于家中床前

作者:铭毅天下

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

如果感觉本文对您有帮助,请点击‘顶’支持一下,您的支持是我坚持写作最大的动力,谢谢!

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

  1. 教你创建qq好友桌面快捷方式

    对于经常使用QQ聊天的朋友来说,在众多好友中搜寻自己常聊的密友虽然不是什么难事,但是我们可以使用更加简便的快捷方式来好友放在桌面上,当需要和他们聊天的时候,只要双击桌面上的好友图标就可以快速打开聊天窗 ...

  2. Linux没有界面怎么用QQ,QQ for Linux怎么建立桌面快捷方式?

    右键单击桌面的空白处,在弹出的对话框中选"新建-应用程序链接".再在弹出的窗口中点"执行",在命令栏中点后面的浏览键,找到QQ for Linux的程序.再点& ...

  3. QQ桌面快捷方式后面的东西原来可以这么多

    QQ桌面快捷方式后面的东西 今天偶然发现,QQ好友可以创建桌面快捷方式,这样一点击桌面相应的快捷方式就可以弹出自己经常聊天的好 友,如果没有登陆QQ会自动登陆并且打开,这也说明了 QQ好强大啊,膜拜之 ...

  4. ubuntu16.04设置应用程序桌面快捷方式(QQ为例)

    上一篇博客我们讲eclipse的时候说到了eclipse桌面图标的创建,那么其他程序的图标呢?这里我们来谈一谈ubuntu下程序桌面快捷方式的创建. 以QQ为例 1.ubuntu界面左边菜单栏第一个图 ...

  5. android string 转成json对象_Android开发:生成桌面快捷方式是这样做的

    关于生成桌面快捷方式,Android提供了原生的api方法.下边就介绍一下兼容8.0的具体做法. 一.首先当然是关于快捷方式的权限了. 我们需要在AndroidManifest文件中添加一下权限: 二 ...

  6. 生成android_Android开发:生成桌面快捷方式是这样做的

    关于生成桌面快捷方式,Android提供了原生的api方法.下边就介绍一下兼容8.0的具体做法. 一.首先当然是关于快捷方式的权限了. 我们需要在AndroidManifest文件中添加一下权限: 二 ...

  7. C#项目打包后安装的桌面快捷方式图标怎么设置成自己想要的图标

    #项目打包后安装的桌面快捷方式图标怎么设置成自己想要的图标 2012-08-25 09:11匿名 | 浏览 3286 次 C#编程 C#项目用vs2005自带的工具打包后安装的桌面快捷方式图标怎么设置 ...

  8. 解决《新编全医药学大词典》开机启动及桌面快捷方式的问题

    <新编全医药学大词典>是一个不错的工具,可是在使用该工具的时候,经常碰到这样的烦心事:只要运行Medic.exe主程序, 就会在桌面上产生一个快捷方式:另外,还将自己设为开机启动.以致有的 ...

  9. autojs之桌面快捷方式

    使用场景 autojs创建桌面快捷方式, 可配合intent使用 效果展示 原理 shortcutManager.requestPinShortcut 安卓官方文档 https://developer ...

最新文章

  1. php文件引用问题,Php引用文件引起的空白行问题(UTF-8)
  2. kcbzps oracle_Oracle 11g DRCP配置与使用(上)
  3. linux下c语言编程gedit,Ubuntu Linux下实现Gedit支持NesC语法高亮
  4. Java中timer的schedule()和schedualAtFixedRate()函数的区别
  5. 火狐浏览器插件大全,火狐插件大全,firefox插件使用方法
  6. 程序布置到服务器上速度慢_百战程序员python面试题总结---高级语法(4)
  7. Python基础函数学习笔记(二)
  8. Linux操作系统选择(免费)
  9. javascript颜色选择器
  10. 怎么做自媒体,这份入门攻略,建议收藏
  11. Vue学习(一)从 mvx模式 到 mvvm模式
  12. 9.mysql SQL面试题
  13. 风冷精密空调安装规范
  14. 技术领导力1-CTO 能力、素质与战略类
  15. 敏捷mini培训总结
  16. word2vec and glove
  17. CS5265的Type-C转HDMI2.0方案
  18. utorrent 连接到用户_用utorrent进行BT下载时如何屏蔽吸血用户的连接
  19. 征服Java面试官!为什么@Value可以获取配置中心的值?感悟分享
  20. 荣获2021 CSDN年度社区之星,PPDE郑博培的成长之旅

热门文章

  1. 红帽OpenStack私有云部署
  2. 外媒:忘掉微软 Win11 吧
  3. navicat连接数据库,闲置一段时间后,再次操作,反应非常缓慢
  4. 进阶无人驾驶—百度Apollo规划技术介绍
  5. hbase热点问题解决(预分区)
  6. 【加强锻炼篇】如何进行科学有效的健身锻炼
  7. 最大的幻术-游戏开发-到底是先学游戏引擎还是先学游戏编程
  8. 7. subprocess
  9. Oracle EBS财务模块(二)基本组成模块
  10. JavaSE--IO流