当前位置: 首页 > news >正文

奇思妙想:超链接唤起本地应用

文章目录

  • 分析
  • 实现
  • 参考

很多人的博客都有这样的小玩意,点击之后就可以直接与博主进行对话,而且无需添加好友。

在这里插入图片描述

先研究一下网页源代码:

<a href="tencent://message/?uin=88888888&Site=qq&Menu=yes">联系我</a>

很明显,奥妙就在这个超链接中,先按照自己的思路来想,要打开本地 QQ,肯定分两步走:

  • 定位 QQ 软件路径
  • 传递给它一些参数启动

可怎么把QQ 跑起来呢,需要我们自己去启动一个线程吗?答案是否定的,Windows 操作系统考虑到了这一点,允许我们为自己的应用程序注册一个协议,具体参见:Registering an Application to a URI Scheme

分析

腾讯的 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

  • HKEY_CLASSES_ROOT\Tencent:Tencent 就是协议名字
  • HKEY_CLASSES_ROOT\Tencent\shell\open\command:内部定义的地址来启动软件

实现

基于上述前提,我们编写如下 .reg 文件

Windows Registry Editor Version 5.00[HKEY_CURRENT_USER\Software\Classes\Demo]
@="MyDemo"
"URL Protocol"=""[HKEY_CURRENT_USER\Software\Classes\Demo\shell\open\command]
@="\"C:\\Users\\zzzzls\\Desktop\\demo.exe\" \"%1\""
// demo.exe
#include <stdio.h>
#include <stdlib.h>int main(int argc, char *argv[]){for (int i=0;i<=argc;i++){printf("%s\n", argv[i]);}system("pause");return 0;
}

浏览器输入:demo://run

在这里插入图片描述

程序执行:

在这里插入图片描述

参考

  • 由Tencent://Message协议想到的一个解决方案
  • 前端网页如何打开一个PC本地应用
http://www.lryc.cn/news/28520.html

相关文章:

  • 初识数据结构——“数据结构与算法”
  • 华为OD机试Golang解题 - 计算网络信号
  • ESP32编译及运行错误记录
  • GEE开发之降雨(CHIRPS)数据获取和分析
  • TypeScript中面向对象
  • Transformer 模型:入门详解(1)
  • 深入理解js中的new关键字
  • RT-Thread Nano(2) - 线程
  • 真香,Grafana开源Loki日志系统取代ELK?
  • 机器学习|多变量线性回归 | 吴恩达学习笔记
  • 高并发内存池
  • springboot mybatis-plus 对接 sqlserver 数据库 批处理的问题
  • Acwing---843. n-皇后问题——DFS
  • Android事件分发机制
  • python版协同过滤算法图书管理系统
  • Redis基础入门
  • 【微服务】Feign实现远程调用和负载均衡
  • Windows使用QEMU搭建arm64 ubuntu 环境
  • NodeJS安装
  • Gin 优雅打印请求与回包内容
  • 关于k8s中ETCD集群备份灾难恢复的一些笔记
  • 【设计模式之美 设计原则与思想:设计原则】19 | 理论五:控制反转、依赖反转、依赖注入,这三者有何区别和联系?
  • 2023年全国最新高校辅导员精选真题及答案13
  • 【XXL-JOB】XXL-JOB定时处理视频转码
  • optuna用于pytorch的轻量级调参场景和grid search的自定义设计
  • 语法篇--汇编语言先导浅尝
  • 【ID:17】【20分】A. DS顺序表--类实现
  • 【java web篇】Tomcat的基本使用
  • MySQL实战解析底层---行锁功过:怎么减少行锁对性能的影响
  • 初识STM32单片机