zoukankan      html  css  js  c++  java
  • 通过网页调起客户端程序

    果冻栋吖原创内容:未经允许禁止转载~

    怎么像百度云那样通过网页调起客户端程序?

    先说下我的经历,愚蠢的我直接同C#CS程序调起本地程序的方法,写在了网页上,显然,这样是不对的,这样调起的是服务器的程序,并不是客户端程序。

    那么,具体是怎么操作的呢?

    代码有很多不足之处,肯定会有更好的办法,如果您有什么建议,请联系我QQ:1772829123或者评论。请各位大佬不吝赐教!

    网页的代码挺简单,

    MyApp: 是要调起的程序,需要加注册表信息
    aadmin,123321是传递的参数,实际是用字符串传递过去的,程序打开后接收的参数是“MyApp:aadmin,123321”。
    这个我不知道怎么处理,直接数组方式传递,如果道友知道,希望指导一下!

    主要是修改注册表的信息。

    <input type="button" value="打开我的应用" onclick="openMyApp()"/>
    <script>
      function openMyApp(){
         window.location.href='MyApp:aadmin,123321';
      }
    </script>

    注册表修改需要一个文件,来增加程序的注册表信息,不然没法调起。这里写了一个增加的,一个删除的。

    增加的:

    Windows Registry Editor Version 5.00
    
    [HKEY_CLASSES_ROOTMyApp]
    @="MyApp"
    "URL Protocol"="你的软件路径"
    
    [HKEY_CLASSES_ROOTMyAppDefaultIcon]
    @="你的软件路径,1"
    
    [HKEY_CLASSES_ROOTMyAppshell]
    
    [HKEY_CLASSES_ROOTMyAppshellopen]
    
    [HKEY_CLASSES_ROOTMyAppshellopencommand]
    @=""软件路径" "%1""

    删除的:

    Windows Registry Editor Version 5.00
    [-HKEY_CLASSES_ROOTMyApp]

    这样,就修改好注册表信息了,不过实际程序不存在是调用不起来的哦

    程序的代码是这样的:

    首先要修改应用程序的主入口点,也就是Program.cs

            static void Main(string[] args)
            {
    
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                string str = string.Empty;
                if (args.Length > 0)
                {
                    str = args[0].ToString();
                    Application.Run(new Form1(str));
                }
                Application.Run(new Form1());
            }

    通过接收参数来取得网页传递过来的值。

    重载Form1的构造函数

    public partial class Form1 : Form
        {
            public string userName = string.Empty;
            public string userPwd = string.Empty;
            public Form1()
            {
                InitializeComponent();
            }
    
            public Form1(string str)
            {
                str = str.Replace("myapp:", "");
                string[] args = str.Split(',');
                if (args.Length>=2)
                {
                    userName = args[0].ToString();
                    userPwd = args[1].ToString();
                }
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                this.txtUserName.Text = userName;
                this.txtUserPwd.Text = userPwd;
            }
        }

    这里注意下,当参数传递过来的时候MyApp会全部变为小写~

    最后,看一下运行效果:

    选择打开,就会看到用户名和密码自动填写上了,只是测试,界面细节请忽略~

  • 相关阅读:
    2015 ACM/ICPC Asia Regional Changchun Online HDU 5444 Elven Postman【二叉排序树的建树和遍历查找】
    JDBC连接MySQL数据库
    MySQL实习训练1
    I Hate It
    Just a Hook
    Mayor's posters
    asd的甩锅计划
    程序员的恋情
    Radical and array
    Highways
  • 原文地址:https://www.cnblogs.com/jellydong/p/7380522.html
Copyright © 2011-2022 走看看