从web页面启动winform程序的实现方法
2017-06-06 00:00
585 查看
本文实现的需求是:
A.通过web页面启动winform程序;
B.将页面的参数传递给winform程序;
C.winform程序已经启动并正在运行时,从web页面不能重新启动winform程序,只是当传入winform程序的参数更改时,winform上显示的数据作出相应的更新。
具体实现如下:
1、页面html代码
2、页面启动的程序是通过注册表来启动的
a、通过注册表脚本文件(xxx.reg)操作注册表
b、通过批处理文件(xxx.bat)操作注册表
3、winform程序处理页面传入的参数(基于C#)
1)、Program.cs文件代码
2)、winform代码文件的代码
A.通过web页面启动winform程序;
B.将页面的参数传递给winform程序;
C.winform程序已经启动并正在运行时,从web页面不能重新启动winform程序,只是当传入winform程序的参数更改时,winform上显示的数据作出相应的更新。
具体实现如下:
1、页面html代码
<!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> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> </head> <body> <div> <a href="OraAns://传入exe的参数1"> 打开1 </a> <br> <a href="OraAns://传入exe的参数2"> 打开2 </a> <br> <a href="OraAns://传入exe的参数3"> 打开3 </a> <br> <a href="OraAns://传入exe的参数4"> 打开4 </a> <br> </div> </body> </html>
2、页面启动的程序是通过注册表来启动的
a、通过注册表脚本文件(xxx.reg)操作注册表
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\OraAns] "URL Protocol"="E:\\Debug\\xxx.exe" @="OraAnsProtocol" [HKEY_CLASSES_ROOT\OraAns\DefaultIcon] @="E:\\Debug\\xxx.exe,1" [HKEY_CLASSES_ROOT\OraAns\shell] [HKEY_CLASSES_ROOT\OraAns\shell\open] [HKEY_CLASSES_ROOT\OraAns\shell\open\command] @="\"E:\\Debug\\xxx.exe\" \"%1\""
b、通过批处理文件(xxx.bat)操作注册表
reg add HKEY_CLASSES_ROOT\OraAns /ve /t reg_sz /d OraAnsProtocol reg add HKEY_CLASSES_ROOT\OraAns /v "URL Protocol" /t reg_sz /d “%~dp0OraAns.exe” reg add HKEY_CLASSES_ROOT\OraAns\DefaultIcon /ve /t reg_sz /d “%~dp0OraAns.exe”,1 reg add HKEY_CLASSES_ROOT\OraAns\shell\open\command /ve /t reg_sz /d "\"%~dp0OraAns.exe\" \"%%1\""
3、winform程序处理页面传入的参数(基于C#)
1)、Program.cs文件代码
using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using System.Text.RegularExpressions; using Microsoft.Win32; using System.Threading; namespace OraAns { static class Program { public static EventWaitHandle ProgramStarted; //事件等待句柄 /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main(string[] args) { if (args.Length > 0) //从页面启动时有参数传入,否则直接启动 { string sParameterValue = Regex.Match(args[0], "^[0-9a-zA-Z]+://(.+)$").Groups[1].Value; FilterInvalidCharacter(ref sParameterValue); Registry.SetValue(@"HKEY_CURRENT_USER\Software\OraAnsParameters", "", sParameterValue); //将经过处理的传入参数写入注册表 bool bIsOrNotCreateNew; ProgramStarted = new EventWaitHandle(false, EventResetMode.AutoReset, "OraAnsClient", out bIsOrNotCreateNew); if (!bIsOrNotCreateNew) { //winform程序已经启动时执行 ProgramStarted.Set(); return; } } Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new OralAnswerMain()); } /// <summary> /// 处理页面传回的参数的非法字符 /// </summary> /// <param name="sParameterValue"></param> static void FilterInvalidCharacter(ref string sParameterValue) { int nStrLength = sParameterValue.Length; if (nStrLength > 0) { if ('/' == sParameterValue[nStrLength - 1]) { if (1 == nStrLength) { sParameterValue = ""; } else { sParameterValue = sParameterValue.Substring(0, nStrLength - 1); } } } } } }
2)、winform代码文件的代码
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;using Microsoft.Win32; using System.Threading; namespace OraAns { public partial class OraAnsMain : Form { /// <summary> /// 构造函数 /// </summary> public OraAnsMain() { InitializeComponent(); try { //从注册表中获取页面传递过来的参数并解析 object Obj = Registry.GetValue(@"HKEY_CURRENT_USER\Software\OraAnsParameters", "", string.Empty); if (Obj != null) { string sReString = Obj as string; //TODO:解析从页面传入的字符串参数 } if (Program.ProgramStarted != null) { ThreadPool.RegisterWaitForSingleObject(Program.ProgramStarted, OnProgramStarted, this, -1, false); //注册线程委托 } } catch (Exception e) { e.ToString(); } } public delegate void MyInvoke(); //声明委托 //ThreadPool.RegisterWaitForSingleObject方法执行的回调 void OnProgramStarted(object state, bool timeout) { try { //通过委托进行异步调用的处理,避免不同线程操作UI线程 MyInvoke mi = new MyInvoke(UIinitial); this.BeginInvoke(mi, new Object[] { /*UIinitial方法调用的输入参数对象*/ }); } catch (Exception e) { e.ToString(); } } /// <summary> /// UI显示初始化 /// </summary> void UIinitial() { //TODO:UI初始化的处理 } private void OraAnsMain_Load(object sender, EventArgs e) { } } }
相关文章推荐
- WinForm程序启动时不显示主窗体的实现方法
- Winform实现抓取web页面内容的方法
- C# WinForm程序启动时不显示主窗体的实现方法
- WinForm程序启动时不显示主窗体的实现方法
- WinForm程序启动时不显示主窗体的实现方法(转)
- 如何一启动web程序,直接访问某个controller里的方法进而跳转页面
- WinForm程序启动时不显示主窗体的实现方法
- c#实现程序启动唯一实例的一种方法
- 在C#中启动另一个程序的实现方法
- Android中WebView实现点击超链接启动QQ的方法
- asp.net在事件中启动线程来打开一个页面的实现方法
- 移动端web页面蒙层滚动时页面主体内容不随之滚动的实现方法
- winform程序开机自启动设置方法总结
- c# Winform 程序自动更新实现方法
- winform程序访问一个web方法,传递参数,返回数据
- WinForm 程序Post GEt web程序方法
- ASP.NET也像WinForm程序一样运行的实现方法
- vs 2005调试程序是出现无法在web服务器上启动调试,调试失败的解决方法。
- winform程序在当前会话只允许启动一个的方法
- JAVASCRIPT实现的WEB页面跳转以及页面间传值方法