从web页面启动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 > ) //从页面启动时有参数传入,否则直接启动
{
string sParameterValue = Regex.Match(args[], "^[0-9a-zA-Z]+://(.+)$").Groups[].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 > )
{
if ('/' == sParameterValue[nStrLength - ])
{
if ( == nStrLength)
{
sParameterValue = "";
}
else
{
sParameterValue = sParameterValue.Substring(, nStrLength - );
}
}
}
}
}
}
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, -, 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)
{
}
}
}
......
从web页面启动winform程序的实现方法的更多相关文章
- 吉特仓库管理系统(开源)-如何在网页端启动WinForm 程序
在逛淘宝或者使用QQ相关的产品的时候,比如淘宝我要联系店家点击旺旺图标的时候能够自动启动阿里旺旺进行聊天.之前很奇怪为什么网页端能够自动启动客户端程序,最近在开发吉特仓储管理系统的时候也遇到一个类似的 ...
- 如何在网页端启动WinForm 程序
在逛淘宝或者使用QQ相关的产品的时候,比如淘宝我要联系店家点击旺旺图标的时候能够自动启动阿里旺旺进行聊天.之前很奇怪为什么网页端能够自动启动客户端程序,最近在开发吉特仓储管理系统的时候也遇到一个类似的 ...
- C#实现Web链接启动应用程序
C#实现Web链接启动应用程序 最近需要配合Web端实现用户点击链接来启动应用程序并且需要能够传参数给应用程序. 那么就可以使用注册表来实现这个功能 编写注册表可以在软件安装程序中加入,也可以在软件启 ...
- 用JQuery中的Ajax方法获取web service等后台程序中的方法
用JQuery中的Ajax方法获取web service等后台程序中的方法 1.准备需要被前台html页面调用的web Service,这里我们就用ws来代替了,代码如下: using System; ...
- C#之VS2010ASP.NET页面调用Web Service和winform程序调用Web Service
一:用ASP.NET调用Web Service 打开VS2010,打开“文件-新建-网站”,选择“ASP.NET网站” 选好存储位置,语言后点击确定,进入默认页面.然后先添加Web引用,把WebSer ...
- 【问题记录】— web页面调用本地程序
起因: 最近由于项目需要在web页面中调用本地部署的exe程序:进而对该功能实现做了对应了解:以及存在的问题进行记录. 要实现该功能就不得不说浏览器自定义协议:解决办法:那么它是什么呢? 浏览器自定义 ...
- web页面和小程序页面实现瀑布流效果
小程序实现瀑布流效果,和web页面差不多,都要经过以下步骤: 1).加载图片,获取图片的宽高度: 2).根据页面需要显示几列计算每列的宽度: 3).根据图片真实宽度和每列的宽度比,计算出图片需要显示的 ...
- web页面实现文件下载的几种方法
今天碰到文件下载的一些问题,本着知其然也要知其所以然的精神,站在巨人的肩膀上深入学习和测试了一下,抛砖引玉,现在总结结论如下: 1)标准URL下载方式可以通过在web页面中嵌入 url超级链接,标准的 ...
- 打印web页面指定区域的三种方法
本文和大家分享一下web页面实现指定区域打印功能的三种方法,一起来看下吧. 第一种方法:使用CSS 定义一 个.noprint的class,将不打印的内容放入这个class内. 代码如下: <s ...
随机推荐
- TortoiseSVN and TortoiseGit 版本控制图标不见了
突然有一天,代码文件夹上的版本控制图标不见了. 注册表中,将文件夹名重命名,让版本控制的靠前,Computer \ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft ...
- (笔记)Linux内核学习(十一)之I/O层和I/O调度机制
一 块I/O基本概念 字符设备:按照字符流的方式被有序访问的设备.如串口.键盘等. 块设备:系统中不能随机(不需要按顺序)访问固定大小的数据片(chunk 块)的设备. 如:硬盘.软盘.CD-ROM驱 ...
- Linux流量监控工具-iftop教程
Linux流量监控工具-iftop教程http://automationqa.com/forum.php?mod=viewthread&tid=2854&fromuid=2
- HTML5 Canvas实战之刮奖效果
近年来由于移动设备对HTML5的较好支持,经常有活动用刮奖的效果,最近也在看H5方面的内容,就自己实现了一个,现分享出来跟大家交流. 1.效果 2.原理 原理很简单,就是在刮奖区添加两个canvas, ...
- 数据仓库与ODS的区别
我在公司的数据部门工作,每天的订单类数据处理流程大致如下: 删除分析数据库的历史订单数据 全量更新订单数据到分析数据库.(由于订单核心数据不大,所以经受得起这么折腾) 将数据简单清洗,并生成数据集市层 ...
- SSIS:控件清单
Control Flow 控制流程 Containers 容器 For Loop Container Foreach Loop Container Sequence Container Core Ta ...
- MVC3.0学习笔记之元模型元数据ModelMetaData以及模型元数据提供系统
模型元数据ModelMetaData是MVC中很重要的概念,它包括但不仅限于 模型的类型,模型包含了哪些属性,属性都是什么类型的,属性上都有什么特性. ASP.NET MVC3.0 提供了默认的模型元 ...
- 测试GeoGebra博客
已知函数 \(\textit{f}(\textit{x})=2\textit{m}\ln\textit{x}-\textit{x}^2\), \(\textit{g}(\textit{x})=\tex ...
- 【转】在web 项目使用了ReportViewer时出错
”应用程序中的服务器错误. -------------------------------------------------------------------------------- 分析器错误 ...
- Registering iOS Devices for Testing - 注册测试设备
http://support.smartbear.com/viewarticle/63764/ Applications developed using the iOS Developer Progr ...