C# web页面唤醒本地winform应用并执行指定命令


C#开发winform项目,业务需要在web页面中唤醒winfom的exe程序,并打开对应功能窗体,有点类似于百度云盘,在浏览器中点击下载链接的时候,会提示用客户端下载,

先上效果Demo

在浏览器web页面中点击不同的超链接,打开自己的winform程序,并且根据不同的链接信息,能够打开不同的窗体,

实现原理

自定义协议 URL Protocol

利用自定义URL Protocol来调用应用程序。浏览器在解析到自定义URL Protocol之后,会寻找注册表,然后通过注册表启动相应的程序,然后启动改程序,传入参数。

设想一个场景,当我们在百度网盘需要下载某个资源时,你的电脑可能经常会跳出一个提示框,询问你是否需要打开“百度云盘客户端”。当我们点击“是”,则会唤醒该本地应用进行下载任务。这就是通过自定义协议 URL Protocol 来实现唤醒本地应用的

C# web页面唤醒本地winform应用并执行指定命令

 

winform消息

Windows消息机制是windows平台上的线程或者进程间通信机制之一。Windows消息值其实就是定义的一个数据结构,最重要的是消息的类型,它就是一个整数;然后就是消息的参数。消息的参数可以表示很多东西。

Windows提供了一些api用来向一个线程的消息队列发送消息。因此,一个线程可以向另一个线程的消息队列发送消息从而告诉对方做什么,这样就完成了线程间的通信。有些api发送消息需要一个窗口句柄,这种函数可以把消息发送到指定窗口的主线程消息队列;而有些则可以直接通过线程句柄,把消息发送到该线程消息队列中。

C# web页面唤醒本地winform应用并执行指定命令

SendMessage是windows api,用来把一个消息发送到一个窗口的消息队列。这个方法是个阻塞方法,也就是操作系统会确保消息的确发送到目的消息队列,并且该消息被处理完毕以后,该函数才返回。返回之前,调用者将会被暂时阻塞。

PostMessage也是一个用来发送消息到窗口消息队列的api函数,但这个方法是非阻塞的。也就是它会马上返回,而不管消息是否真的发送到目的地,也就是调用者不会被阻塞。

实现

C# web页面唤醒本地winform应用并执行指定命令

测试步骤

  1. 管理员运行Exe程序,点击注册程序按钮
  2. 直接以普通用户启动exe程序,或者直接跳过

在html页面中点击超链接,就可以唤起应用了

Exe程序下载

ClientDemo.rar

WEB页面打开exe程序 Demo体验

在线Demo

 

 项目源码已托管至Github

 

参考:https://blog.csdn.net/qq_40409571/article/details/110796663

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
张国生
上一篇:Winform开启一个http服务,web服务
下一篇:C# winform程序判断是否管理员运行
评论列表

发表评论

评论内容
昵称:
关联文章

C# web页面唤醒本地winform应用执行指定命令
GZDBHelper中ExecuteDataReader方法,执行SQL语句,返回指定对象集合
Xamarin.Forms 复制本地SQLite数据库
git 放弃本地修改
Winform项目和Web API的.NetCore项目中使用Serilog 来记录日志信息
Winform开启一个http服务,web服务
慎用System.Web.HttpContext.Current
ASP.NET Core MVC 在过滤器ActionFilter中保存页面的生成的html静态页面文件
.net Core编译出现错误:指定的任务可执行文件“sgen.exe”未能运行,文件名或扩展名太长
C# 执行Javascript脚本
C# 利用 SharpZipLib 对多个文本字符串进行多文件打包为RAR或ZIP进行下载
YES-WEB快速开发框架,.NET WEB开发平台,高效的web项目开发框架
C# winform选择dll文件
C# Winform选择文件夹目录
使用node启动本地项目,搭建本地服务器
C#解析指定dll的app.config配置文件
YESWin Winform开发框架 项目初始化配置运行
C# - 逆变的具体应用场景
C#的进化——C#发展史、C#1.0-10.0语法系统性梳理、C#与JAVA的对比
CMD运行命令程序自动暂停问题解决

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码