C# web页面唤醒本地winform应用并执行指定命令
C#开发winform项目,业务需要在web页面中唤醒winfom的exe程序,并打开对应功能窗体,有点类似于百度云盘,在浏览器中点击下载链接的时候,会提示用客户端下载,
先上效果Demo
在浏览器web页面中点击不同的超链接,打开自己的winform程序,并且根据不同的链接信息,能够打开不同的窗体,
实现原理
自定义协议 URL Protocol
利用自定义URL Protocol来调用应用程序。浏览器在解析到自定义URL Protocol之后,会寻找注册表,然后通过注册表启动相应的程序,然后启动改程序,传入参数。
设想一个场景,当我们在百度网盘需要下载某个资源时,你的电脑可能经常会跳出一个提示框,询问你是否需要打开“百度云盘客户端”。当我们点击“是”,则会唤醒该本地应用进行下载任务。这就是通过自定义协议 URL Protocol 来实现唤醒本地应用的
winform消息
Windows消息机制是windows平台上的线程或者进程间通信机制之一。Windows消息值其实就是定义的一个数据结构,最重要的是消息的类型,它就是一个整数;然后就是消息的参数。消息的参数可以表示很多东西。
Windows提供了一些api用来向一个线程的消息队列发送消息。因此,一个线程可以向另一个线程的消息队列发送消息从而告诉对方做什么,这样就完成了线程间的通信。有些api发送消息需要一个窗口句柄,这种函数可以把消息发送到指定窗口的主线程消息队列;而有些则可以直接通过线程句柄,把消息发送到该线程消息队列中。
SendMessage是windows api,用来把一个消息发送到一个窗口的消息队列。这个方法是个阻塞方法,也就是操作系统会确保消息的确发送到目的消息队列,并且该消息被处理完毕以后,该函数才返回。返回之前,调用者将会被暂时阻塞。
PostMessage也是一个用来发送消息到窗口消息队列的api函数,但这个方法是非阻塞的。也就是它会马上返回,而不管消息是否真的发送到目的地,也就是调用者不会被阻塞。
实现
测试步骤
- 管理员运行Exe程序,点击注册程序按钮
- 直接以普通用户启动exe程序,或者直接跳过
在html页面中点击超链接,就可以唤起应用了
Exe程序下载
WEB页面打开exe程序 Demo体验
参考:https://blog.csdn.net/qq_40409571/article/details/110796663