QQ是怎样实现好友桌面快捷方式的?
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
进制值。该组成即是快捷方式能实现与好友直接互联的核心。
2)、打开文件位置——EXE进程的路径即QQScLauncher.exe的安装路径。
3)、更改图标——图标的存储路径,即是好友的头像图标的存储路径,例如以下图所看到的:
基本断定为位MD5值.ico的形式存储的好友头像。
Windows下实现桌面快捷方式须要用到两个COM接口IShellLink和IPersistFile的部分函数。
1)设置目标:HRESULT SetPath(LPCTSTR pszFile);
2)更改图标: HRESULT SetIconLocation(LPCTSTRpszIconPath,int iIcon);
3)保存快捷方式:HRESULT Save( LPCOLESTRpszFileName, BOOL fRemember);
三、QQ好友桌面快捷方式的实现流程
个人判断的大致流程例如以下:
步:实现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的实现创建好友桌面快捷方式。具体函数參见第二部分。
四、測试好友桌面快捷方式效果回馈
点。假设创建了好友的桌面快捷方式,即使我们人为手动更换了名称。如“1234.lnk”改为“5678.lnk”。可是点击删除桌面快捷方式,仍然可以删除。
前提是好友快捷方式必须还在桌面路径如C:\Users\Public\Desktop上。是什么标示了该快捷方式的唯一性?尚不知道。
点,假设我们人为删除了好友桌面快捷方式。右击好友仍会出现“生成桌面快捷方式”;可是一旦我们生成了桌面快捷方式。右击好友仅仅会出现“删除桌面快捷方式”。该功能实现的细节非常到位。
这仅仅是QQ实现的一个小功能,细致留意,这些小功能都极大的方便了我们大众用户的操作。
也为我们开发者提供了非常好的借鉴和參考。
2014-4-26 pm0:40 思于家中床前
作者:铭毅天下
转载请标明出处。原文地址:http://blog.csdn.net/laoyang360/article/details/24503161
假设感觉本文对您有帮助。请点击‘顶’支持一下。您的支持是我坚持写作最大的动力,谢谢!
QQ是怎样实现好友桌面快捷方式的?的更多相关文章
- 模仿添加QQ好友桌面快捷方式
/** * * @param context * @param tname 桌面快捷方式的名字 * @param icon 好友头像 */ public static void addShortCut ...
- C#项目打包后安装的桌面快捷方式图标怎么设置成自己想要的图标
#项目打包后安装的桌面快捷方式图标怎么设置成自己想要的图标 2012-08-25 09:11匿名 | 浏览 3286 次 C#编程 C#项目用vs2005自带的工具打包后安装的桌面快捷方式图标怎么设 ...
- Centos 7(linux)系统下如何给jar应用程序创建桌面快捷方式
1.创建系统自带的应用程序快捷方式 对于系统自带的应用程序,其桌面快捷方式存储的位置为以下三个目录中的其中一个: /usr/share/applications ~/.local/share/appl ...
- Ubuntu创建桌面快捷方式
默认情况下,ubuntu会将自动安装的软件快捷方式保存在/usr/share/applications目录下,如果我们要创建桌面快捷方式,只需要右键-复制-桌面 就Ok,如图: 上面的方法是通过系统自 ...
- Windows中创建桌面快捷方式
Windows中创建桌面快捷方式 -------------- -------------- -------------- --------------
- Windows Server 2008 R2组策略创建用户桌面快捷方式
问题: 如何让所有域用户桌面有一个公司共享的快捷方式,让所有域用户直接双击就能打开公司共享. 解决办法: 1.创建一个zhuyu组织单元 ----- 在zhuyu组织单元创建一个域用户user1. 2 ...
- php生成网页桌面快捷方式
本文将介绍使用PHP生成网页桌面快捷方式的代码,并添加图标及解决不同浏览器保存出现的乱码问题. 我们访问网站时,如果网站的内容很有吸引,一般我们都会使用浏览器的收藏夹功能,收藏此网站. 在浏览器收藏的 ...
- Android 添加桌面快捷方式操作
/** * 为程序创建桌面快捷方式 */ private void addShortcut(){ Intent shortcut = new Intent(“com.android.launcher. ...
- Terminal中输入命令直接打开QtCreator,以及创建其桌面快捷方式
工业项目设计学习第一步,熟悉开发工具 Qt学习论坛,东西多,但也杂 emouse的博客,以前学习STM32开发环境搭建时也是参考这位博主的 更多详细的步骤在上面都能找到,今天先不写,等明天把硬件设备全 ...
随机推荐
- AdminLTE介绍和zTree的简单使用
一.AdminLTE介绍 1.介绍 AdminLTE是一个开源的后台控制面板和仪表盘 WebApp 模板,是建立在Bootstrap3框架和JQuery之上的开源模板主题工具,它提供了一系列响应的 ...
- java中String类为什么要设计成final?
1 将方法或类声明为final主要目的是:确保它们不会在子类中改变语义.String类是final类,这意味着不允许任何人定义String的子类. String基本约定中最重要的一条是immutabl ...
- 初学layer
canvas是支持图层layer渲染这种技术的,canvas默认就有一个layer,当我们平时调用canvas的各种drawXXX()方法时,其实是把所有的东西都绘制到canvas这个默认的layer ...
- 高级Java知识
高级Java知识(JVM.字节码.内存模型) 内存=方法区+栈空间+堆+程序计数器 栈(stack)包括虚拟机栈(VM stack)和本地方法栈(native method stack). 方法区(m ...
- [Windows Server 2003] 网页Gzip压缩
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:启用网站GZI ...
- Java编译器、JVM、解释器
Java虚拟机(JVM)是可运行Java代码的假想计算机.只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java代码能够在该系统上运行.本文首先简要介绍从Java文件的编译 ...
- 大白_uva10795_新汉诺塔
题意:给出所有盘子的初态和终态,问最少多少步能从初态走到终态,其余规则和老汉诺塔一样. 思路: 若要把当前最大的盘子m从1移动到3,那么首先必须把剩下的所有盘子1~m-1放到2上,然后把m放到3上. ...
- url取值乱码问题,url加中文导致页面不能加载问题 js unicode转码,以及解码
很多时候写H5或其他适配时,打不开url.很多原因是因为浏览器不支持中文url,从url拿 出来的中文值也会乱码,这时候就必须把中文转化成Unicode值,去进行页面传值 中文转Unicode fun ...
- 关于JS中的方法是否加括号的问题
js中的方法什么时候加括号什么时候不加括号呢,我们有时候经常就搞不清楚,记住下面这几点就好理解了. 1.函数做参数时都不要加括号. function fun(a){ alert(a); } funct ...
- Silverlight之我见——数据批示(1)
第一次听到这个概念,你是否有点陌生?MSDN上也没有特意的去说明.不要看到这个名词不太熟悉,其实数据批示,玩过C#的人都会非常熟悉,所谓数据批示,其本质就是特性(Attribute),怎么样,现在有点 ...