ZT:通过网页链接打开应用程序客户端的两种实现方式

近期公司要做一个项目,其中一个需求就是通过网页链接能够打开我们的IM软件,于是我对QQ和MSN、阿里旺旺进行了一番研究。发现主要是通过两种方式来实现的:
第一种方式是修改注册表的方式,QQ和阿里旺旺就是通过这种方式实现的。基本方法就是在安装过程中或者是程序第一次启动时
在注册表创建类似下面的键项和键值,
QQ:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOTTencent]
@="TencentProtocol"
"URL Protocol"="C:\Program Files\Tencent\QQ\Timwp.exe"

[HKEY_CLASSES_ROOTTencentDefaultIcon]
@="C:\Program Files\Tencent\QQ\Timwp.exe,1"

[HKEY_CLASSES_ROOTTencentshell]

[HKEY_CLASSES_ROOTTencentshellopen]

[HKEY_CLASSES_ROOTTencentshellopencommand]
@=""C:\Program Files\Tencent\QQ\Timwp.exe" "%1""

阿里旺旺:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOTAlitalk]
"URL Protocol"=""

[HKEY_CLASSES_ROOTAlitalkShell]

[HKEY_CLASSES_ROOTAlitalkShellOpen]

[HKEY_CLASSES_ROOTAlitalkShellOpenCommand]
@=""C:\Program Files\Alisoft\WangWang\WangWang.EXE" %1"

当我们点击网页上的链接或者直接通过浏览器输入tencent://或Alitalk://这样的URL时,这些输入全部作为命令行参数传递给应用程序。
我们的客户端程序需要对这些输入进行解析,然后做出响应。

第二种方式需要使用apps(Asynchronous Pluggable Protocols),需要apps的规则编写一个COM组件,MSN就是这种方式.
安装MSN的过程中会注册msgrapp.8.5.1288.0816.dll(我的机器上是这个文件,MSN是8.5的),同时在注册表注册msnim这个自定义协议scheme,

代码如下:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOTPROTOCOLSHandlermsnim]
"CLSID"="{828030A1-22C1-4009-854F-8E305202313F}"

{828030A1-22C1-4009-854F-8E305202313F}就是这个协议对应的处理器(msgrapp.8.5.1288.0816.dll)的CLSID。

注册成功后,我们在浏览器中输入任何的以msnim:开头的URL请求都会发送到这个COM组件,由这个DLL来处理。

关于apps可以参考MSDN:

http://msdn2.microsoft.com/en-us/library/aa767916.aspx#About_URLs_and_Name_

原文地址:http://blog.csdn.net/insidekernel/archive/2008/01/10/2033175.aspx

只是看着太有用了,才挪用过来。尤其是第一种方法。

发布者

Kathy

Love itself is a mad thing!

发表评论

电子邮件地址不会被公开。 必填项已用*标注