怎么像百度云那样通过网页调起客户端程序?
先说下我的经历,愚蠢的我直接同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_ROOT\MyApp] @="MyApp" "URL Protocol"="你的软件路径" [HKEY_CLASSES_ROOT\MyApp\DefaultIcon] @="你的软件路径,1" [HKEY_CLASSES_ROOT\MyApp\shell] [HKEY_CLASSES_ROOT\MyApp\shell\open] [HKEY_CLASSES_ROOT\MyApp\shell\open\command] @="\"软件路径\" \"%1\""
删除的:
Windows Registry Editor Version 5.00 [-HKEY_CLASSES_ROOT\MyApp]
这样,就修改好注册表信息了,不过实际程序不存在是调用不起来的哦
程序的代码是这样的:
首先要修改应用程序的主入口点,也就是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会全部变为小写~
最后,看一下运行效果:
选择打开,就会看到用户名和密码自动填写上了,只是测试,界面细节请忽略~
时间: 2024-10-12 20:22:45