zoukankan      html  css  js  c++  java
  • 实践网页链接启动应用附带参数

    1.什么需求都是有的,你们懂得。我们就来实践下,兜住底,别让技术人的脸面掉地上了。

    2.先从搜索开始,经过关键字切换,不断过滤,依据这边文章搞定大半 https://www.cnblogs.com/wang726zq/archive/2012/12/11/UrlProtocol.html

    3.不同需求在于我这要求启动的应用是iexplore.exe,经过实践,因为协议完整没有处理的原因,会不停的关闭重启,今日开启关闭的不断循环中

    4.解决问题从原因出发,需要启动应用后处理原来的网页链接内容。

    5.步骤简述

      1)定义协议头,传递参数,部署测试页面

        

     <p>
          <a href='HkVideo://www.bing.com'>查看视频监控</a>
        </p>
        <button type='button' onclick='window.location.href = "HkVideo://http://www.baidu.com"'>查看视频监控</button>

    上面两种触发机制都可以。

      2)添加注册表文件,或者进入rededit手动添加到对应目录下 HKEY_CLASSES_ROOTHkVideoshellopencommand

    Windows Registry Editor Version 5.00
    
    [HKEY_CLASSES_ROOTHkVideo]
    @="Open HkVideo"
    "URL Protocol"=""
    
    [HKEY_CLASSES_ROOTHkVideoshell]
    
    [HKEY_CLASSES_ROOTHkVideoshellopen]
    
    [HKEY_CLASSES_ROOTHkVideoshellopencommand]
    @=""d:\youApp.exe" "%1""

      3)我是用golang build 了参数解析,执行命令的app,其他winform等形式都可以

    package main
    
    import (
        "bytes"
        "fmt"
        "log"
        "os"
        "os/exec"
        "strings"
    )
    
    const ShellToUse = "C:/Program Files/Internet Explorer/iexplore.exe"
    
    func Shellout(command string) (error, string, string) {
        var stdout bytes.Buffer
        var stderr bytes.Buffer
        cmd := exec.Command(ShellToUse, command)
        cmd.Stdout = &stdout
        cmd.Stderr = &stderr
        err := cmd.Run()
        return err, stdout.String(), stderr.String()
    }
    func main() {
        fmt.Println(os.Args[1])
        url := os.Args[1]
        index := strings.Index(url, "//")
        url = url[index+2:]
        // flag.StringVar(&url, "url", "google.com", "url program")
        // flag.Parse()
        fmt.Println(url)
        err, out, errout := Shellout(url)
        if err != nil {
            log.Printf("error: %v
    ", err)
        }
        fmt.Println("--- stdout ---")
        fmt.Println(out)
        fmt.Println("--- stderr ---")
        fmt.Println(errout)
    }

      4)app放到注册表的目录

    总结 : 从页面链接触发自定义协议“HkVideo//”,会在注册表中寻找,如果已经注册过,则调用openIE.exe 程序,app接收到参数后处理,并附带参数执行命令行。

      

  • 相关阅读:
    SetConsoleScreenBufferSize 函数--设置控制台屏幕缓冲区大小
    GetConsoleScreenBufferInfo 函数--获取控制台屏幕缓冲区信息
    CONSOLE_SCREEN_BUFFER_INFO 结构体
    GetStdHandle 函数--获取标准设备的句柄
    设计模式之代理模式(Proxy Pattern)_远程代理解析
    设计模式之状态模式(State Pattern)
    设计模式之组合模式(Composite Pattern)
    设计模式之迭代器模式(Iterator Pattern)
    设计模式之模版方法模式(Template Method Pattern)
    设计模式之外观模式(Facade Pattern)
  • 原文地址:https://www.cnblogs.com/wellma/p/14663427.html
Copyright © 2011-2022 走看看