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

Unity 之通过自定义协议从浏览器启动本地应用程序

内容将会持续更新,有错误的地方欢迎指正,谢谢!
 

Unity 之通过自定义协议从浏览器启动本地应用程序
     
TechX 坚持将创新的科技带给世界!

拥有更好的学习体验 —— 不断努力,不断进步,不断探索
TechX —— 心探索、心进取!

助力快速掌握 自定义协议 启动程序

为初学者节省宝贵的学习时间,避免困惑!


前言:

  当今,Web 应用程序已经成为我们日常生活和工作中不可或缺的一部分。然而,有时我们可能需要从 Web 浏览器直接启动本地安装的应用程序,以处理特定的任务或数据。这时候,自定义协议就显得尤为重要和便捷。

自定义协议允许我们定义一种新的 URL 方案,使得浏览器能够识别并直接与本地应用程序进行通信。这种技术不仅提升了用户体验,还增强了 Web 应用程序与本地环境的集成能力,使得用户可以更高效地完成工作任务。

在本文中,我们将探讨如何设置和利用自定义协议来处理特定的 URL,以便从浏览器中打开本地应用程序。我们将介绍如何注册和处理自定义协议,并演示如何在浏览器中触发本地应用程序的启动,以实现无缝的跨平台集成和工作流程优化。


文章目录

  • 一、注册自定义协议
  • 二、使用自定义协议打开应用程序
  • 三、在Unity中处理自定义协议传递的参数


一、注册自定义协议


自定义协议(Custom Protocol)是一种在操作系统级别定义的URL协议,可以让特定的URL模式触发特定的应用程序。通过自定义协议,你可以在浏览器中点击一个链接,然后启动一个本地应用程序。这在开发需要从网页启动本地应用的场景中非常有用,比如启动Unity生成的.exe文件。
@echo off
cd /d %~dp0@REM echo "%cd%":: 创建一个注册表文件并写入头部信息
echo Windows Registry Editor Version 5.00 >regist.reg:: 创建主键 PrimaryKey,用于自定义协议
echo [HKEY_CLASSES_ROOT\PrimaryKey] >>regist.reg:: 指定这是一个 URL 协议
echo "URL Protocol"="" >>regist.reg:: 设置协议的描述
echo @="Primary Key Protocol" >>regist.reg:: 创建子键 DefaultIcon,用于设置协议的图标
echo [HKEY_CLASSES_ROOT\PrimaryKey\DefaultIcon] >>regist.reg:: 使用当前目录下的 YourUnityGame.exe 作为图标
echo @="%cd:\=\\%\\YourUnityGame.exe,1" >>regist.reg:: 创建子键 shell
echo [HKEY_CLASSES_ROOT\PrimaryKey\shell] >>regist.reg:: 创建子键 shell\open
echo [HKEY_CLASSES_ROOT\PrimaryKey\shell\open] >>regist.reg:: 创建子键 shell\open\command
echo [HKEY_CLASSES_ROOT\PrimaryKey\shell\open\command] >>regist.reg:: 设置当协议被调用时执行的命令,将当前目录路径转义,并将第一个参数传递给 YourUnityGame.exe
echo @="\"%cd:\=\\%\\YourUnityGame.exe\" \"%%1\"" >>regist.reg:: 静默地导入注册表文件
regedit /s regist.reg:: 删除临时生成的注册表文件
del regist.reg:: 输出注册成功的提示信息
echo 注册成功:: 暂停批处理脚本的执行,等待用户按下任意键继续
pause

PrimaryKey为注册表文件中的主键,可以根据你的需要自行填写

YourUnityGame为你的程序名称

创建一个批处理文件(例如register_protocol.bat),将上面的脚本代码粘贴进去。

将YourUnityGame.exe放在与批处理文件相同的目录中。

以管理员身份运行register_protocol.bat,会自动完成协议注册。

在这里插入图片描述

使用命令符regedit命令,打开注册表,在计算机\HKEY_CLASSES_ROOT\PrimaryKey中可以查看到已经注册完成。


二、使用自定义协议打开应用程序


完成自定义协议之后,你可以在浏览器中使用形如:

PrimaryKey://{“param1”:“value1”,“param2”:“value2”,“param3”:“value3”}的URL来启动YourUnityGame.exe

并传递参数{“param1”:“value1”,“param2”:“value2”,“param3”:“value3”}到YourUnityGame.exe程序中

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Open Application with Custom Protocol</title><style>body {display: flex;justify-content: center;align-items: center;height: 100vh;font-family: Arial, sans-serif;background-color: #f0f0f0;}button {padding: 10px 20px;font-size: 16px;cursor: pointer;background-color: #4CAF50;color: white;border: none;border-radius: 5px;box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);}button:hover {background-color: #45a049;}</style>
</head>
<body><button onclick="openApp()">Open YourUnityGame App</button><script>function openApp() {window.location.href = 'PrimaryKey://{"param1":"value1","param2":"value2","param3":"value3"}';}</script>
</body>
</html>

点击按钮后会弹出这个窗口,说明你已经成功了,即将打开YourUnityGame 应用程序

在这里插入图片描述


三、在Unity中处理自定义协议传递的参数


当你从自定义协议中获取到参数链接后,通常是一个类似于

PrimaryKey://{“param1”:“value1”,“param2”:“value2”,“param3”:“value3”} 的字符串。

接下来的关键是如何从这个字符串中提取出每个参数的值。

在Unity中,可以通过使用Newtonsoft.Json 库来解析 JSON 格式的参数。

确保在 Unity 项目中导入了 Newtonsoft.Json 库,你可以通过 Unity 的 Package Manager 或手动导入 DLL 文件来实现或在Packages/mainifest.json中添加"com.unity.nuget.newtonsoft-json": “3.2.1”

using Newtonsoft.Json;
using System.Text.RegularExpressions;
using UnityEngine;[System.Serializable]
public class ProtocolData
{public string param1;public string param2;public string param3;
}public class ProtocolHandler : MonoBehaviour
{string protocolPattern = @"^(?<protocol>\w+)://(?<param>\{.+\})$";void Start(){// 获取启动时的参数string[] args = System.Environment.GetCommandLineArgs();// 如果有参数if (args.Length > 1){//"PrimaryKey://{\"param1\":\"value1\",\"param2\":\"value2\",\"param3\":\"value3\"}"string protocolLink = args[1];// 使用正则表达式匹配自定义协议链接Match match = Regex.Match(protocolLink, protocolPattern);// 如果匹配成功if (match.Success){// 获取协议名string protocol = match.Groups["protocol"].Value;// 获取 {} 中的 JSON 内容string jsonContent = match.Groups["param"].Value;// 输出协议名和 JSON 内容,方便调试Debug.Log("Protocol: " + protocol);Debug.Log("JSON Content: " + jsonContent);// 使用 Newtonsoft.Json 解析 JSONProtocolData data = JsonConvert.DeserializeObject<ProtocolData>(jsonContent);// 现在可以访问 data 中的参数值Debug.Log("param1: " + data.param1);Debug.Log("param2: " + data.param2);Debug.Log("param3: " + data.param3);}else{Debug.Log("Received parameter does not match the custom protocol format.");}}}
}

Regex.Match(protocolLink, protocolPattern) 使用正则表达式匹配 protocolLink 中的自定义协议链接。

如果匹配成功 (match.Success),则从 match.Groups[“protocol”] 获取协议名称,从 match.Groups[“param”] 获取 JSON 内容。

使用 JsonConvert.DeserializeObject<>() 方法将 JSON 内容解析为 ProtocolData 类型的对象,然后可以访问其中的参数值。




TechX —— 心探索、心进取!

每一次跌倒都是一次成长

每一次努力都是一次进步

END
感谢您阅读本篇博客!希望这篇内容对您有所帮助。如果您有任何问题或意见,或者想要了解更多关于本主题的信息,欢迎在评论区留言与我交流。我会非常乐意与大家讨论和分享更多有趣的内容。
如果您喜欢本博客,请点赞和分享给更多的朋友,让更多人受益。同时,您也可以关注我的博客,以便及时获取最新的更新和文章。
在未来的写作中,我将继续努力,分享更多有趣、实用的内容。再次感谢大家的支持和鼓励,期待与您在下一篇博客再见!

相关文章:

Unity 之通过自定义协议从浏览器启动本地应用程序

内容将会持续更新&#xff0c;有错误的地方欢迎指正&#xff0c;谢谢! Unity 之通过自定义协议从浏览器启动本地应用程序 TechX 坚持将创新的科技带给世界&#xff01; 拥有更好的学习体验 —— 不断努力&#xff0c;不断进步&#xff0c;不断探索 TechX —— 心探索、心进…...

Python抓取天气信息

Python的详细学习还是需要些时间的。如果有其他语言经验的&#xff0c;可以暂时跟着我来写一个简单的例子。 2024年最新python教程全套&#xff0c;学完即可进大厂&#xff01;&#xff08;附全套视频 下载&#xff09; (qq.com) 我们计划抓取的数据&#xff1a;杭州的天气信息…...

【超越拟合:深度学习中的过拟合与欠拟合应对策略】

如何处理过拟合 由于过拟合的主要问题是你的模型与训练数据拟合得太好&#xff0c;因此你需要使用技术来“控制它”。防止过拟合的常用技术称为正则化。我喜欢将其视为“使我们的模型更加规则”&#xff0c;例如能够拟合更多类型的数据。 让我们讨论一些防止过拟合的方法。 获…...

【Orange Pi 5与Linux内核编程】-理解Linux内核中的container_of宏

理解Linux内核中的container_of宏 文章目录 理解Linux内核中的container_of宏1、了解C语言中的struct内存表示2、Linux内核的container_of宏实现理解3、Linux内核的container_of使用 Linux 内核包含一个名为 container_of 的非常有用的宏。本文介绍了解 Linux 内核中的 contain…...

003.Linux SSH协议工具

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…...

web前端组织分析:深入剖析其结构、功能与未来趋势

web前端组织分析&#xff1a;深入剖析其结构、功能与未来趋势 在数字化浪潮的推动下&#xff0c;Web前端组织作为连接用户与数字世界的桥梁&#xff0c;其重要性日益凸显。本文将从四个方面、五个方面、六个方面和七个方面对Web前端组织进行深入分析&#xff0c;揭示其结构特点…...

GitCode热门开源项目推荐:Spider网络爬虫框架

在数字化高速发展时代&#xff0c;数据已成为企业决策和个人研究的重要资源。网络爬虫作为一种强大的数据采集工具受到了广泛的关注和应用。在GitCode这一优秀的开源平台上&#xff0c;Spider网络爬虫框架凭借其简洁、高效和易用性&#xff0c;成为了众多开发者的首选。 一、系…...

实现一个二叉树的前序遍历、中序遍历和后序遍历方法。

package test3;public class Test_A27 {// 前序遍历&#xff08;根-左-右&#xff09;public void preOrderTraversal(TreeNode root){if(rootnull){return;}System.out.println(root.val"");preOrderTraversal(root.left);preOrderTraversal(root.right);}// 中序遍…...

串扰(二)

三、感性串扰 首先看下串扰模型及电流方向&#xff1a; 由于电感是阻碍电流变化&#xff0c;受害线的电流方向和攻击线的电流方向相反。同时由于受害线阻抗均匀&#xff0c;故有Vb-Vf&#xff08;感应电流属于电池内部电流&#xff09;。 分析感性串扰大小仍然是按微分的方法…...

零基础入门学用Arduino 第四部分(三)

重要的内容写在前面&#xff1a; 该系列是以up主太极创客的零基础入门学用Arduino教程为基础制作的学习笔记。个人把这个教程学完之后&#xff0c;整体感觉是很好的&#xff0c;如果有条件的可以先学习一些相关课程&#xff0c;学起来会更加轻松&#xff0c;相关课程有数字电路…...

Mp3文件结构全解析(一)

Mp3文件结构全解析(一) MP3 文件是由帧(frame)构成的&#xff0c;帧是MP3 文件最小的组成单位。MP3的全称应为MPEG1 Layer-3 音频 文件&#xff0c;MPEG(Moving Picture Experts Group) 在汉语中译为活动图像专家组&#xff0c;特指活动影音压缩标准&#xff0c;MPEG 音频文件…...

ES 8.14 Java 代码调用,增加knnSearch 和 混合检索 mixSearch

1、pom依赖 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-client</artifactId><version>8.14.0</version></dependency><dependency><groupId>co.elastic.clients<…...

被腰斩的颍川郡守赵广汉

在颍川&#xff0c;他发明了举报箱&#xff0c;铁腕扫黑除恶。因为曾经在郡府所在地阳翟&#xff08;禹州&#xff09;当过县令&#xff0c;熟悉颍川社情民意&#xff0c;所以&#xff0c;任职郡守后雷厉风行&#xff0c;才不到一年&#xff0c;不但制服了骄横的豪门大族&#…...

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 目录管理器(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 目录管理器(200分) 🌍 评测功能需要订阅专栏后私信联系清隆…...

关于自学\跳槽\转行做网络安全行业的一些建议

很好&#xff0c;如果你是被题目吸引过来的&#xff0c;那请看完再走&#xff0c;还是有的~ 为什么写这篇文章 如何自学入行&#xff1f;如何小白跳槽&#xff0c;年纪大了如何转行等类似问题 &#xff0c;发现很多人都有这样的困惑。下面的文字其实是我以前的一个回答&#…...

计算机网络(1) OSI七层模型与TCP/IP四层模型

一.OSI七层模型 OSI 七层模型是国际标准化组织ISO提出的一个网络分层模型&#xff0c;它的目的是使各种不同的计算机和网络在世界范围内按照相同的标准框架实现互联。OSI 模型把网络通信的工作分为 7 层&#xff0c;从下到上分别是物理层、数据链路层、网络层、传输层、会话层、…...

认识QML

为什么使用Qt Quick&#xff1f; Qt4的设计用于满足开发者在主流桌面操作系统上有一套表现一致的窗口组件可以 使用。如今Qt的使用者面临了新的问题&#xff0c;他们需要提供可触碰交互的用户界面以满 足软件界面需求&#xff0c;并在主流桌面操作系统和移动操作系统上实现这些…...

llama-factory微调chatglm3

一、定义 案例/多卡 二、实现 案例 1. 下载chatglm3-6b-32k模型 2. 配置数据集微调指令 CUDA_VISIBLE_DEVICES0,1 llamafactory-cli train \--stage sft \--do_train True \--model_name_or_path /home/chatglm3-6b-32k \--finetuning_type lora \--template chatglm3 \--d…...

大文件上传实现

分片上传 将大文件分割成多个小片&#xff08;chunk&#xff09;&#xff0c;逐个上传。每个片上传成功后&#xff0c;服务器可以返回确认信息。所有片上传完成后&#xff0c;服务器端将这些片重新组合成原始文件。 以下是一个简单的分片上传的前端实现示例&#xff1a; func…...

为何Proteus用户争相拥抱SmartEDA?揭秘背后的强大吸引力!

在电路设计与仿真领域&#xff0c;Proteus一度以其稳定性能和丰富功能赢得了众多用户的青睐。然而&#xff0c;近年来&#xff0c;越来越多的Proteus用户开始转向SmartEDA&#xff0c;这一新兴电路仿真软件正迅速崭露头角&#xff0c;成为行业内的翘楚。那么&#xff0c;究竟是…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...