通过浏览器运行cmd命令、启动steam
我们先来看看实现起来的效果,我们在浏览器中输入ping so.com

试试打开计算器、启动steam

要实现这个效果其实用到了浏览器自定义协议,我们可以通过自定义协议打开wechat、扣扣、emali应用等待。比如在web客服系统中通常会使用tencent://自定义协议提供一个扣扣聊天按钮,当我们点击时浏览器会启动外部应用。
我们将自定义协议写入注册表后,浏览器会根据协议启动我们的先导应用,如下在tencent://协议中启动了一个Timwp.exe,Timwp.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的更多相关文章
- C#隐式运行CMD命令(隐藏命令窗口)
原文 C#隐式运行CMD命令(隐藏命令窗口) 本文实现了C#隐式运行CMD命令的功能.下图是实例程序的主画面.在命令文本框输入DOS命令,点击"Run"按钮,在下面的文本框中输出运 ...
- [delphi]运行cmd命令,并取得输出字符
http://blog.csdn.net/nerdy/article/details/8969189 [delphi]运行cmd命令,并取得输出字符 标签: delphiCMD命令 2013-05- ...
- ASP.NET CORE下运行CMD命令
ASP.NET CORE下运行CMD命令,用以前的ASP.NET 的命令System.Diagnostics.Process.Start("notepad");这样是可以运行出记事 ...
- C# 运行CMD命令
/// <summary> /// 运行CMD命令 /// </summary> /// <param name="cmd">命令</pa ...
- Atitit.运行cmd 命令行 php
Atitit.运行cmd 命令行 php 1. 运行cmd 命令行,调用系统命令的基础 1 1.1. 实际运行模式 1 1.2. 空格的问题 1 1.3. 中文路径的问题.程序文件读取编码设置 1 1 ...
- cmd命令 启动 和关闭sql服务
(1)在操作系统的任务栏中单击“开始”菜单,选择“运行”命令,在下拉列表框中输入“cmd”命令,单击“确定”按钮. (2)输入如下命令,即可通过SQL Server命令行启动.停止或暂停的服务. SQ ...
- ECStore在Win环境下如何运行CMD命令
大多数程序员使用windows开发环境来做ECStore二次开发,经常需要使用 ECStore自带的cmd命令进行一些系统操作,如清除缓存(cacheclean),升级程序(update),创建新的a ...
- C# Process运行cmd命令的异步回显
以下的代码为new Process() 调用cmd命令,并将结果异步回显到Form的例子: 以下的代码为new Process() 调用cmd命令,并将结果异步回显到Form的例子: [csharp] ...
- java运行cmd命令
java的Runtime.getRuntime().exec(commandStr)可以调用执行cmd指令. cmd /c dir 是执行完dir命令后关闭命令窗口. cmd /k dir 是执行完d ...
随机推荐
- Datatables 实现前端分页处理
引言 Datatables 是一款 jquery 表格插件.它是一个高度灵活的工具,可以将任何 HTML 表格添加高级的交互功能. 支持分页(包括即时搜索和排序) 支持几乎任何数据源(DOM.java ...
- 【Microstation】三维建模基础及软件入门到精通实验教程目录
@ 目录 1. 专栏简介 2. 专栏地址 3. 专栏目录 1. 专栏简介 MicroStation是一款非常不错的二维和三维设计软件,由奔特力(Bentley)工程软件系统有限公司开发的一款软件.在C ...
- 创建一个本地Yum 仓库,提升速度,减少带宽
1 mkdir /YUM 2 mount -t iso9660 -o loop /home/dan/Centos-7-x86_x64-DVD.iso /mnt/iso/ 3 rpm -ivh delt ...
- Python-名片管理器
# 需要完成的基本功能: # 添加名片 # 删除名片 # 修改名片 # 查询名片 # 退出系统 # 程序运行后,除非选择退出系统,否则重复执行功能 list_info = [] # 创建一个空列表 # ...
- spring模板
applicationContext <?xml version="1.0" encoding="UTF-8"?> <beans xmlns= ...
- 在Maven普通项目上添加Web app的支持
项目右键____> Add Frameworks Support
- HDFS 05 - HDFS 的元数据管理(FSImage、EditLog、Checkpoint)
目录 1 - NameNode 的启动流程 2 - NameNode 的元数据 2.1 EditLog 操作日志 2.2 查看 EditLog 文件 2.3 FSImage 元数据镜像 2.4 查看 ...
- GO学习-(32) Go实现日志收集系统1
Go实现日志收集系统1 项目背景 每个系统都有日志,当系统出现问题时,需要通过日志解决问题 当系统机器比较少时,登陆到服务器上查看即可满足 当系统机器规模巨大,登陆到机器上查看几乎不现实 当然即使是机 ...
- SQL Server 50道查询训练题,学生Student表
下面这个是题目所用到的数据库! 首先你需要在你的SQL Sever数据库中创建[TestDb]这个数据库,接下来下面这个代码.直接复制在数据库里运行就好了! 1 USE [TestDb] 2 GO 3 ...
- OFRecord 数据集加载
OFRecord 数据集加载 在数据输入一文中知道了使用 DataLoader 及相关算子加载数据,往往效率更高,并且学习了如何使用 DataLoader 及相关算子. 在 OFrecord 数据格式 ...