zoukankan      html  css  js  c++  java
  • url protocol

    首先注册服务

    方法1,保存为reg文件直接执行,需要按需修改路径

     Windows Registry Editor Version 5.00  
    [HKEY_CLASSES_ROOTEasyPrint]  
    "URL Protocol"="C:\Program Files\EasyPrint\EasyPrint.exe"  
    @="EasyPrintProtocol"  
    [HKEY_CLASSES_ROOTEasyPrintDefaultIcon]  
    @="C:\Program Files\EasyPrint\EasyPrint.exe,1"  
    [HKEY_CLASSES_ROOTEasyPrintshell]  
    [HKEY_CLASSES_ROOTEasyPrintshellopen]  
    [HKEY_CLASSES_ROOTEasyPrintshellopencommand]  
    @=""C:\Program Files\EasyPrint\EasyPrint.exe" "%1""  

    方法2,在程序中自动注册服务,此操作可以放到安装程序中,根据实际情况获取path即可

    var path = "E:\code\EasyPrint\EasyPrint\bin\Debug";
                List<string> cmds =
                new List<string>{
                   "/c" + $"reg add "HKCR\EasyPrint" /f /ve  /d "EasyPrintProtocol"",
                   "/c" + $"reg add "HKCR\EasyPrint" /f /v "URL Protocol"  /d "",
                   "/c" + $"reg add "HKCR\EasyPrint\DefaultIcon" /f /ve  /d ""+path+"\EasyPrint.exe,1"",
                   "/c" + $"reg add "HKCR\EasyPrint\shell\open\command" /f /ve  /d "\""+path+"\EasyPrint.exe\"  \"%1\"""
                };
                foreach (var command in cmds)
                {
                    Process p = new Process
                    {
                        StartInfo =
                        {
                            FileName = "cmd.exe",
                            Arguments = command,
                            UseShellExecute = false,
                            RedirectStandardInput = true,
                            RedirectStandardOutput = true,
                            CreateNoWindow = true
                        }
                    };
                    p.Start();
                    p.StandardInput.WriteLine("exit");
                    p.Close();
                }

    3. 对步骤2封装

    /// <summary>
            /// 注入urlPrototal协议
            /// </summary>
            /// <param name="prototalName">协议名称</param>
            /// <param name="programPath">执行程序的路径</param>
            /// <param name="programName">启动的具体程序(不包含路径)</param>
            /// <returns></returns>
            public static bool InjectPrototal(string prototalName, string programPath,string programName)
            {
                //var path = "E:\code\EasyPrint\EasyPrint\bin\Debug";
                List<string> cmds =
                new List<string>{
                   "/c" + $"reg add "HKCR\{prototalName}" /f /ve  /d "{prototalName}Protocol"",
                   "/c" + $"reg add "HKCR\{prototalName}" /f /v "URL Protocol"  /d "",
                   "/c" + $"reg add "HKCR\{prototalName}\DefaultIcon" /f /ve  /d "{programPath}\{programName},1"",
                   "/c" + $"reg add "HKCR\{prototalName}\shell\open\command" /f /ve  /d "\""+programPath+"\{programName}\"  \"%1\"""
                };
                foreach (var command in cmds)
                {
                    Process p = new Process
                    {
                        StartInfo =
                        {
                            FileName = "cmd.exe",
                            Arguments = command,
                            UseShellExecute = false,
                            RedirectStandardInput = true,
                            RedirectStandardOutput = true,
                            CreateNoWindow = true
                        }
                    };
                    p.Start();
                    p.StandardInput.WriteLine("exit");
                    p.Close();
                }
                return true;
            }

    将会在系统中注册一个协议,此协议名称根据注册表的key决定,此处为EasyPrint,大小写无关

    调用时即使用  EasyPrint://par1&par2

    具体参数传递方式根据需要自行处理即可,系统会将完整请求自动转发给注册的程序

    留待后查,同时方便他人
    联系我:renhanlinbsl@163.com
  • 相关阅读:
    斐波那契数列
    斐波那契数列
    .NET (C#)ASP.NET 应用程序与页面生命周期
    .NET (C#) Internals: ASP.NET 应用程序与页面生命周期(意译)
    如何使用:before和:after伪元素?
    学习的网址
    css盒子(box)
    利用Asp.Net来实现“网络硬盘”功能
    Jtemplates ${} or {{html}}的区别
    Jtemplate
  • 原文地址:https://www.cnblogs.com/ives/p/urlprotocol.html
Copyright © 2011-2022 走看看