好久没跟新博客了,今天跟新2019年的第一篇博客,最近在做项目,需求就是Web页面调用本地客户端程序并传参,传参是为了避免客户端再次输入账号密码,直接跳过登录。
翻了不少资料,总的来说好像都要操作注册表调用客户端以及传参。
1.写了一个简单的WPF的Demo来接收参数,当接收到参数时弹出消息框。(只要是客户端应该都有个主入口来接收参数的)
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
if (e.Args.Length > 0)
{
var window = new WPFDemo();
window.ShowEx(e.Args[0]);
}
}
}
/// <summary>
/// 获取启动参数
/// </summary>
/// <param name="args"></param>
public void ShowEx(string args)
{
MessageBox.Show(args);
}
2.往注册表写入信息,客户端文件路径以及参数占位符(个人理解)。
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\WPFDemo]
@=""
"URL Protocol"=""
[HKEY_CLASSES_ROOT\WPFDemo\DefaultIcon]
@=C:\\Users\\Administrator\\Desktop\\新建文件夹\\WpfApp1.exe,1"
[HKEY_CLASSES_ROOT\WPFDemo\shell]
@=""
[HKEY_CLASSES_ROOT\WPFDemo\shell\open]
@=""
[HKEY_CLASSES_ROOT\WPFDemo\shell\open\command]
@="\"C:\\Users\\Administrator\\Desktop\\新建文件夹\\WpfApp1.exe\" \"%1\""
绿色的是注册表中的项值,红色的是你要调用的客户端路径,注意双斜扛。%1应该代表的是你要传的参。
新建个txt文本,把以上文本复制进去保存。跟改下txt后缀名为reg,双击运行即可注册进注册表。
然后win+R,输入regedit,打开注册表。检查注册成功了没,如下图注册成功。
3.建个web页面测试下。WPFDemo要写你注册表中注册的项值,后面写传递给客户端的参数。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div>
<a href="WPFDemo://admin,123456">
open exe
</a>
</div>
</body>
</html>
4.运行html,测试下是否成功。客户端弹出所传参数,说明接收成功了。到此web端调用本地客户端程序传参完成,后续客户端接收参数跳过登录也好,做其它操作也好都行了。
好久没写博客了,正好项目需要研究这个问题,记录下来,以便以后自己遇到相同问题有个参照,当然能帮助到其他人就更好了。代码学习感觉是个长期积累的过程,不能松懈。