`
pitian
  • 浏览: 25347 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

超链接问题

阅读更多
今天在试用WebQQ的时候,无聊中想起很多人的博客上都有这样的小玩意, ,  点击下就可以和博主进行对话,而且无需加博主为好友。

哎,这样的方式不就正好是BruceZhang那个问题的解决方案吗?那么腾讯是怎么做到在Web页面中调用QQ程序的呢?

先来看腾讯提供给我们的代码:

<a href="tencent://message/?uin=88888888&Site=JooIT.com&Menu=yes">
<img border="0" SRC='http://is.qq.com/webpresence/images/status/01_online.gif' alt="点击这里给我发消息">
</a>

    很显然,奥妙就在“tencent://message/?uin=215555521&Site=JooIT.com&Menu=yes”这里,那这又到底是什么原理呢?

先扯开话题按自己的思路来想,要打开本地的QQ,肯定要分两步走,首先是定位到QQ,然后是传递给它一些参数,也就是“uin=215555521&Site=JooIT.com&Menu=yes”这样的东西。定位的话,借助注册表是最明显的方式了。可怎么把QQ跑起来呢?要我们自己去启动一个进程么?答案是否定的,Windows操作系统考虑了这一点,允许我们为自己的应用程序注册为一个协议处理者,具体参见MSDN上的文章《Registering an Application to a URL Protocol》

腾讯的Tencent://Message协议注册表如下:

Windows Registry Editor Version 5.00

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

[HKEY_CLASSES_ROOT\Tencent\DefaultIcon]
@="D:\\Program Files\\Tencent\\QQ\\Timwp.exe,1"

[HKEY_CLASSES_ROOT\Tencent\shell]

[HKEY_CLASSES_ROOT\Tencent\shell\open]

[HKEY_CLASSES_ROOT\Tencent\shell\open\command]
@="\"D:\\Program Files\\Tencent\\QQ\\Timwp.exe\" \"%1\""

此注册表所实现的就是当浏览器(或其它)碰到 tencent://… 时,自动调用 Timwp.exe,并把 tencent://… 地址作为第一个参数传递给 Timwp.exe。

废话不多说,下面就动手实验一个demo来说明一切,源代码请在文章首部自行下载。 很简单的功能,就是显示传递给MFC Dialog程序的参数值。就只分析下我添加的代码:

     首先需要获取传入的参数,在控制台程序中我们都知道main()函数的参数argv里带入了传入的参数,而在MFC程序中则需要在InitInstance()中进行命令行参数解析。

    CCommandLineInfo   cmdInfo;  
    ParseCommandLine(cmdInfo);

     为了给对话框传入待显示的参数,加入了一个SetDisplayInfo方法。

    CHelloWorldDlg dlg;
    dlg.SetDisplayInfo(cmdInfo.m_strFileName);//设置待显示的信息


void CHelloWorldDlg::SetDisplayInfo(CString& strInfo)
{
    this->m_strInfo = strInfo;
}

     最后在OnInitDialog函数中进行参数解析

    //解析传入的完整地址,e.g "helloworld://hello world/"
    int pos = m_strInfo.Find("//");//找到分隔符
    m_strInfo = m_strInfo.Mid(pos+2);//取到传入的参数
    m_strInfo.Delete(m_strInfo.GetLength()-1);//去掉最后的'/'
    m_edit_info.SetWindowText(m_strInfo);

     好了,来到最关键的步骤了,在注册表中为我们自定义的helloworld协议建立起注册表项,从而让HelloWorld应用程序支持此协议。将如下的注册表项加入即可,这里为了简单起见我直接用一个.reg文件来实现,也可以用其他方式进行:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\HelloWorld]
@="HelloWorld Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\HelloWorld\DefaultIcon]
@="D:\\My Documents\\Visual Studio 2005\\Projects\\HelloWorld\\release\\HelloWorld.exe,1"

[HKEY_CLASSES_ROOT\HelloWorld\shell]
@=""

[HKEY_CLASSES_ROOT\HelloWorld\shell\open]
@=""

[HKEY_CLASSES_ROOT\HelloWorld\shell\open\command]
@="\"D:\\My Documents\\Visual Studio 2005\\Projects\\HelloWorld\\release\\HelloWorld.exe\" \"%1\""

结果如图所示



     好了,这下可以来测试helloworld协议了,在地址栏中输入:helloworld://hello world/,怎么样,下面的画面出来了吧,



     再来到web页面进行测试,修改上面的html代码如下:

<html>
<head></head>
<body>
<div>
<a href="helloworld://hello world">
<img border="0" SRC='http://is.qq.com/webpresence/images/status/01_online.gif' alt="点击这里给我发消息">
</a>
</div>
</body>
</html>

    若是要在web页面调用本地的winform程序,同理也是可行,不过我不大懂.net,有心的朋友请试试看。

分享到:
评论

相关推荐

    修复office超链接问题

    总之,修复Office中的超链接问题通常涉及到恢复浏览器设置和检查注册表。在处理这类问题时,谨慎和专业知识是必要的,以避免对系统造成不必要的损害。通过理解问题的根源并采取适当的措施,用户可以有效地解决超链接...

    WPS表格的超链接功能.docx

    #### 四、解决从Excel到WPS表格的超链接问题 当从Excel文档转换到WPS表格时,可能会遇到一些超链接无法正常工作的现象。这通常是因为两个软件之间的兼容性差异所导致的。以下是一些解决方法: 1. **检查链接格式**:...

    Windows7下 超链接 不能打开.doc

    标题中的问题描述了一个在Windows 7操作...总之,修复Windows 7下的超链接问题通常涉及到对系统设置、注册表和应用程序关联的检查与调整。正确识别问题的根源并采取相应的解决措施,能够帮助用户恢复正常的超链接功能。

    如何一次性删除word文档中的所有超链接.docx

    此方法的核心思想是通过调整Word的默认粘贴设置来永久性地避免未来文档中出现超链接问题。具体步骤如下: 1. **打开Word并进入选项设置**: - 在Word程序中,选择“文件”菜单下的“选项”。 - 进入“Word选项”...

    excel文件 超链接修复器

    "Excel文件超链接修复器"就是为了解决这个问题而设计的。这个程序由VB6.0编写,VB6(Visual Basic 6.0)是微软公司推出的一种面向对象的编程语言,它在创建桌面应用程序方面非常强大。 首先,我们需要理解超链接在...

    OUTLOOK内容中的超链接打不开解决办法

    OUTLOOK 内容中的超链接打不开是一个常见的问题,很多用户在点击 OUTLOOK 内容中的超链接时,会弹出错误提示,从而无法打开超链接。这种问题通常是由于安装多个浏览器、卸载浏览器不完全等操作时产生系统性错误所致...

    RichTextBox控件 支持插入自定义超链接

    为了解决这个问题,开发者通常会扩展或封装`RichTextBox`控件,以提供自定义超链接的功能。这涉及到对RTF(Rich Text Format)编码的理解,因为`RichTextBox`控件内部使用RTF来存储和显示富文本。RTF是一种文本格式...

    点击listview实现超链接

    标签"ListVi超链接"表明这是关于ListView与超链接相结合的问题。在实际应用中,我们可能还需要考虑其他因素,如适配不同屏幕尺寸、处理长按事件、以及优化ListView的滚动性能等。 总之,实现"点击listview实现...

    HTML超链接中文乱码问题分析及解决方法.docx

    本文将分析超链接中文乱码问题的成因和解决方法。 问题分析 在 HTML 超链接中,当我们需要将中文参数作为 GET 请求的参数时,直接拼接中文参数到 URL 上可能会导致乱码。例如,在一个超链接 URL 中,我们需要将...

    html 中文乱码 HTML超链接中文乱码问题分析及解决方法

    在这里碰到的问题是:调用java.net.URLEncoder的encode()方法时,如果没有显示指定字符集参数,那么URLEncoder会使用默认字符集。这个默认字符集在Eclipse里跑main()方法和在Tomcat里跑Web应用,得到的结果不一样,...

    MFC 实现超链接 主要实现原理

    本篇文章将深入探讨如何使用MFC来实现超链接功能,让应用程序能够显示和响应用户点击的超链接,如电子邮件地址或网页URL。 首先,我们需要了解MFC中的CWnd类,它是所有窗口对象的基础类,包括对话框、控件以及...

    超链接传值不显示中文

    ### 超链接传值不显示中文问题解析 在网页开发过程中,经常遇到的一个问题是超链接传递中文参数时出现乱码或无法正确显示的问题。这个问题主要由编码转换不当引起,尤其是在涉及不同编码环境(如客户端与服务器端)...

    超链接在幻灯片中的应用

    2. **自主学习,探究方法**:学生独立探索创建超链接的方法,教师给予指导,解决学生遇到的问题,如找不到链接菜单、如何链接到其他文件等。 3. **实践巩固,教师指导**:学生实际操作,创建介绍新疆特色的幻灯片,...

    excel 超链接+Python实现工具

    标题中的“Excel超链接+Python实现工具”表明这是一个利用Python编程语言开发的小型应用程序,它的主要功能是生成Excel超链接。...这个工具的出现,体现了Python在解决日常办公自动化问题上的强大能力。

    VC在对话框上加超链接 VC在对话框上加超链接

    如果在链接时遇到问题,可以在项目的链接器设置中添加`shell32.lib`作为附加依赖项。 通过以上步骤,你就可以在VC++的对话框上成功地添加一个具有超链接功能的`CEdit`控件了。在实际开发中,你还可以根据需要扩展这...

    超链接生成器 v3.7.18

    超链接生成器正是为了解决这一问题而设计的,它使用户可以直接通过点击生成的超链接来打开网页,或者通过右键点击选择IE浏览器的快捷菜单,实现更丰富的操作选项。 该软件的应用场景广泛,无论是处理电子邮件、论坛...

    批量导入带超链接的excel.rar

    在实际应用中,你可能还需要考虑错误处理、事务控制、性能优化等问题。同时,由于PHPExcel对大型文件处理可能会消耗大量内存,所以对于大数据量的Excel文件,可能需要采用分块读取或者流式处理的方式来提高效率。 ...

    PHP用正则表达式过滤超链接

    ### PHP使用正则表达式过滤超链接 在Web开发中,经常需要处理HTML文本,比如提取其中的超链接。...本文将详细介绍如何使用PHP结合正则表达式...此外,对于正则表达式的深入学习,还有助于解决更多字符串处理方面的问题。

    javamail发送邮件(超链接返回web后台)

    发送邮件时可能会遇到网络问题、认证失败等异常,因此需要进行适当的异常处理,确保程序的健壮性。 9. **安全性考虑** 当涉及到用户凭证(如 SMTP 用户名和密码)时,应尽量避免明文存储,可以使用环境变量、配置...

    HTML相册以及最基本的超链接

    HTML相册及超链接是网页设计的基础,它们构成了网页的基本元素和交互性。...在实际项目中,你还需要考虑SEO优化、无障碍访问(如`alt`属性)和现代浏览器兼容性等问题,这些都是构建高质量网页的重要组成部分。

Global site tag (gtag.js) - Google Analytics