在web中或者浏览器中打开windows、mac和linux gnome中的应用程序

48 篇文章 2 订阅

以下三种方式都是称为URL scheme,windows和mac下访问通过如下方式:xxxx://argument     (xxxx就是我们自定义的URL名,argument就是参数。windows和mac下的参数均为argument。),而linux下是xxxx:argument这种方式(Linux下的参数是xxxx:argument。)。

一、windows下打开某个应用程序

要想在windows下实现这个功能,我们需要修改注册表,然后在应用程序中处理相应的参数。

参考:https://www.cnblogs.com/wang726zq/archive/2012/12/11/UrlProtocol.html

要实现这个功能一共分3步。(我们注册一个xishui:// 这样的 protocol-handler,实现在网页中点击xishui://hello,就弹出一个对话框,上面显示“hello”)
1 按照如下结构建立注册表

其中 [xishui] 是建立在注册表的 [HKEY_CLASSES_ROOT] 主键下。
2 给相关的键赋值






大家注意到上面 command 项的值为 c:\test.exe "%1" ,这个"%1"是传递给test.exe的参数。如果我们点击xishui://hello这样的链接 那么%1的值就是“xishui://hello” 这个字符串。

到此我们改写程序生成test.exe了,我们的目标是弹出一个对话框,显示xishui://hello链接中的hello字样。 也就是说我们要用正则表达式来取出"xishui://hello" 中 “xishui://” 后面的部分

我们来写一个控制台程序

using System;
using System.IO;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
            string key = Regex.Match(args[0], @"(?<=://).+?(?=:|/|\Z)").Value;
            MessageBox.Show(key);
        }
    }
}


让我把编译生成的test.exe 复制到c:\下
然后 我写了个test.html

<a href="xishui://hello">xishui://hello</a>


然后我在浏览器中点这个链接 ,啥效果?你猜



哇咔咔 真的调用了我的test.exe,并且显示了hello !

 

也可以在运行窗口输入:xishui://hello 调用

那么关于注册表的修改,方法有很多,我们一般都在安装程序的时候就设置好,如何通过API接口修改,百度例子很多。

二、mac下打开本地应用程序

参考:Mac os URL Schemes 浏览器启动本地app

前面写的python操作注册表(Url protocol浏览器启动本地程序)已经说了在windows上面启动本地app的方法,下面准备写一下在Mac os上如何在浏览器启动本地的app。

Mac os上浏览器启动本地app主要是通过URL Shemes,每个打包好的app文件中都会存在一个info.plist文件,如图:

 

image.png

 

这个是Google Chrome.app文件中的内容,里面就包含了info.plist文件,这个文件主要是提供app运行时的一些配置,是比较重要的文件,而Mac os就是通过这个文件来配置启动对应的app的,具体配置很简单,结构如下:
在info.plist文件中添加:

 

<key>CFBundleIdentifier</key>
  <string>com.mycompany.AppleScript.XXXX</string>
  <key>CFBundleURLTypes</key>
  <array>
    <dict>
      <key>CFBundleURLName</key>
      <string>自定义的url名字</string>
      <key>CFBundleURLSchemes</key>
      <array>
        <string>XXXX</string>
      </array>
    </dict>
  </array>

下面是对这些字段的官方解释,想要知道更多关于info.plist文件配置的可以看这里:https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/TP40009249-SW1

image.png

 

最后,想要在浏览器访问你自定义的URL Schemes分两步:
1、双击你的app,打开info.list文件,现将这个自定义的URL Schemes注册进去。(这个应该在安装的时候就通过脚本设置好,而不是通过手动。)
2、在浏览器访问:自定义的url名字://something,就能够打开对应的本地app。


三、linux gnome下打开本地程序

参考:https://blog.csdn.net/chenjialin00001/article/details/100997221  linux下都是通过修改desktop文件,在其中加入字段来实现。https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#exec-variables

首先是desktop文件,里面需要加入一个字段来注册协议

MimeType=x-scheme-handler/myapp

接着在Exec字段中加入 %u来接受参数

Exec=/usr/local/Test/test %u

如果需要root权限则需要使用gksu,它可以让应用程序启动的时候弹出对话框输入root密码,从而以root权限启动程序,如下图

ubuntu18.04例如:在/usr/share/applications/   目录下建立如下内容的文件,取名为myapp.desktop
[Desktop Entry]
Name=myapp
Exec=/usr/share/applications/myapp.sh %u
Type=Application
Terminal=false
MimeType=x-scheme-handler/myapp;

然后,在~/.config/mimeapps.list中加入一行:

x-scheme-handler/myapp=myapp.desktop

接着需要运行一个命令更新协议

sudo update-desktop-database   /usr/share/applications/

然后是html里面,代码如下

<html>
    <head>
	<title>sdfasdfasdfasdf</title>
	</head>
	<body>
     <a href="myapp://">open myapp </a> 
	<p></p>
	<p></p>
</html>
这样点击调用后,是类似 /usr/local/myapp 'myapp://' (myapp://就是linux下的参数,我们再对应的应用中处理的时候,需要注意一下。)这种调用方式。切记应用参数处理。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值