我们先来看看实现起来的效果,我们在浏览器中输入ping so.com

试试打开计算器、启动steam

要实现这个效果其实用到了浏览器自定义协议,我们可以通过自定义协议打开wechat、扣扣、emali应用等待。比如在web客服系统中通常会使用tencent://自定义协议提供一个扣扣聊天按钮,当我们点击时浏览器会启动外部应用。

我们将自定义协议写入注册表后,浏览器会根据协议启动我们的先导应用,如下在tencent://协议中启动了一个Timwp.exeTimwp.exe将URL参数解析后启动对应服务。

据此我们就可以自己注册一个cmd协议来启动我们的应用。我们将如下urlCmd.reg注册表文件导入到注册表HKEY_CLASSES_ROOT项中,当然也可以手动在注册表中添加项和字串来实现,我们告诉注册表我要注册一个URL Protocol,他的目录结构为HKEY_CLASSES_ROOT\cmd\shell\open\command

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\cmd]
@="URL: cmd protocol"
"URL Protocol"="" [HKEY_CLASSES_ROOT\cmd\shell] [HKEY_CLASSES_ROOT\cmd\shell\open] [HKEY_CLASSES_ROOT\cmd\shell\open\command]
@="C:\\Windows\\system32\\urlCmd.exe \"%1\""

导入后看起来是这样的,我们要启动的先导应用为C:\Windows\system32\urlCmd.exe

接下来我们要编写一个urlCmd.exe来实现我们需要的功能,这里我们通过go来编写,我们将传过来的URL解析为<command> <arg>形式,然后调用cmd来执行。注意传参是经过URL编码的,在下面urlCmd.go我们只做了空格的解码。

//urlCmd.go

package main

import (
"fmt"
"log"
"os"
"os/exec"
"strings"
"time"
) func main() {
var cmd_args, cmd_com string // 带参数 不带参
cmd_all := os.Args[1:] // [cmd://<command>%20<arg>] [cmd://<command>/]
cmd_cmd := strings.Split(string(cmd_all[0]), "//") // [cmd: <command>%20<arg>] [cmd: <command>/]
cmd_pre := strings.Split(string(cmd_cmd[1]), "%20") // [<command> <arg>] [<command>/] if len(cmd_pre) == 1 {
cmd_args = "" // 参数为空
} else {
cmd_args = strings.Replace(cmd_pre[1], "/", "", 1)
}
cmd_com = strings.Replace(cmd_pre[0], "/", "", 1) fmt.Printf("\ncommand: %v\nargs: %v\n", cmd_com, cmd_args)
cmd := exec.Command("cmd", "/c", cmd_com, cmd_args)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err := cmd.Run()
if err != nil {
log.Fatalf("err:%v", err)
}
time.Sleep(2 * time.Second)
}

我们build一下编译成exe文件

go bulid urlCmd.go

urlCmd.exe放到C:\Windows\system32\目录下即可,这样我们在浏览器以cmd://协议打开的URL都会路由到这个应用啦。


我学废了,你呢?urlCmd.go还有许多改进空间,有兴趣的同学可以做一个自己的解析器试试哦。


文章有不足的地方欢迎在评论区指出。

欢迎收藏、点赞、提问。关注顶级饮水机管理员,除了管烧热水,有时还做点别的。

通过浏览器运行cmd命令、启动steam的更多相关文章

  1. C#隐式运行CMD命令(隐藏命令窗口)

    原文 C#隐式运行CMD命令(隐藏命令窗口) 本文实现了C#隐式运行CMD命令的功能.下图是实例程序的主画面.在命令文本框输入DOS命令,点击"Run"按钮,在下面的文本框中输出运 ...

  2. [delphi]运行cmd命令,并取得输出字符

     http://blog.csdn.net/nerdy/article/details/8969189 [delphi]运行cmd命令,并取得输出字符 标签: delphiCMD命令 2013-05- ...

  3. ASP.NET CORE下运行CMD命令

    ASP.NET CORE下运行CMD命令,用以前的ASP.NET 的命令System.Diagnostics.Process.Start("notepad");这样是可以运行出记事 ...

  4. C# 运行CMD命令

    /// <summary> /// 运行CMD命令 /// </summary> /// <param name="cmd">命令</pa ...

  5. Atitit.运行cmd 命令行 php

    Atitit.运行cmd 命令行 php 1. 运行cmd 命令行,调用系统命令的基础 1 1.1. 实际运行模式 1 1.2. 空格的问题 1 1.3. 中文路径的问题.程序文件读取编码设置 1 1 ...

  6. cmd命令 启动 和关闭sql服务

    (1)在操作系统的任务栏中单击“开始”菜单,选择“运行”命令,在下拉列表框中输入“cmd”命令,单击“确定”按钮. (2)输入如下命令,即可通过SQL Server命令行启动.停止或暂停的服务. SQ ...

  7. ECStore在Win环境下如何运行CMD命令

    大多数程序员使用windows开发环境来做ECStore二次开发,经常需要使用 ECStore自带的cmd命令进行一些系统操作,如清除缓存(cacheclean),升级程序(update),创建新的a ...

  8. C# Process运行cmd命令的异步回显

    以下的代码为new Process() 调用cmd命令,并将结果异步回显到Form的例子: 以下的代码为new Process() 调用cmd命令,并将结果异步回显到Form的例子: [csharp] ...

  9. java运行cmd命令

    java的Runtime.getRuntime().exec(commandStr)可以调用执行cmd指令. cmd /c dir 是执行完dir命令后关闭命令窗口. cmd /k dir 是执行完d ...

随机推荐

  1. unbuntu下清理磁盘空间

    把很多大文件删除,并清空回收站后,发现可用存储空间并没增大,如图: 用find /home -size +500k 过滤出大于500k bytes的文件,发现原来删除的yuv文件都被置于.cache目 ...

  2. 【BUAA 软工热身作业】继往开来,勇攀高峰

    项目 内容 课程:2020春季软件工程课程博客作业(罗杰,任健) 博客园班级链接 作业:热身作业,阅读并撰写博客 作业要求 课程目标 学习大规模软件开发的技巧与方法,锻炼开发能力 作业目标 学习前辈经 ...

  3. 手写Promise中then方法返回的结果或者规律

    1. Promise中then()方法返回来的结果或者规律 我们知道 promise 的 then 方法返回来的结果值[result]是由: 它指定的回调函数的结果决定的 2.比如说下面这一段代码 l ...

  4. [bug] Shell:paths must precede expression

    参考 https://www.cnblogs.com/peter1994/p/7297656.html

  5. Java8 Period 类与 Duration 类 用法详解

    引言 Java 8 中引入了两个与日期相关的新类: Period :基于日期值 Duration:基于时间值 它们最大的作用就不需要你自己复杂的计算关于两个年月日之间的相差的时间或日期啦. Perio ...

  6. CSS(2)盒子模型、定位浮动

    盒子模型 盒子模型:一个盒子中主要的属性就5个.width与height.padding.border.margin.盒子模型标准有两种为标准盒模型和IE盒模型.学习上以标准盒子模型为主 width和 ...

  7. GO汇编-函数

    GO汇编-函数 终于到函数了!因为Go汇编语言中,可以也建议通过Go语言来定义全局变量,那么剩下的也就是函数了.只有掌握了汇编函数的基本用法,才能真正算是Go汇编语言入门.本章将简单讨论Go汇编中函数 ...

  8. 通过CSS设计模式搭建自己系统的CSS架构

    theme: qklhk-chocolate 传统的CSS书写风格是随意命名,堆叠样式,造成了混乱不堪的结果,复杂页面的样式书写通常会出现几百行甚至上千行的代码,CSS设计模式在实际应用中的横空出世拯 ...

  9. Python+Selenium自动化总结

    Python+Selenium自动化总结 1.环境搭建 1.1.安装selenium模块文件 pip install selenium 1.2.安装ChromeDriver驱动 [1]下载安装Chro ...

  10. 内部排序算法(交换排序,插入排序)注意点(C语言实现)

    对于算法思想的理解可以参考下面的这个帖子,十大经典排序算法(动图演示) - 一像素 - 博客园,因为算法的逻辑和数学很像,相应的基础资料一般也能在网上找到,所以,本帖子这谈论一些重要的注意点,其他人讲 ...