例如,我们想在浏览器中输入 myTest://openMain让winform程序打开主窗口。我们该怎么做呢?
首先、修改winform程序为单实例模式。
如果是VB.net
- 在 “项目”菜单上单击 “属性”。
- 单击 “应用程序”选项卡。
- 选中 “生成单个实例应用程序”复选框。
- 单击 “查看应用程序事件”按钮以打开 ApplicationEvents.vb 文件。
- 编写代码
ByVal sender As Object,
ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupNextInstanceEventArgs
) Handles Me.StartupNextInstance
Dim MsgHandler As String = "myTest://"
Dim Action As String = ""
For Each s As String In e.CommandLine
If s.ToLower.StartsWith(MsgHandler) Then
Action = s.Remove(0, MsgHandler.Length)
End If
Next
Select Case Action
Case "openMain"
Me.OpenForms.Item("MainFrm").Show()
Case Else
End Select
End Sub
C#实现省略。
然后、客户端注册URL协议.
向注册表增加"myTest:"协议,指定程序启动路径及消息格式.
原理:
当一个用户点击一个注册了你的自定义URL协议的链接后,浏览器会启动注册的URL协议的处理器。如果指定shellopen命令在注册表中包含一个%1参数的话,Internet Explorer传递这个URI给注册协议的处理器。这最后的统一资源标识符(URI)被编码(%1);即16进制换码符被转换为等价的UTF-16字符。
[HKEY_CLASSES_ROOT\myTest]
@=""
"URL Protocol"=""
[HKEY_CLASSES_ROOT\myTest\Shell]
[HKEY_CLASSES_ROOT\myTest\Shell\Open]
[HKEY_CLASSES_ROOT\myTest\Shell\Open\Command]
@="\"c:\\WindowsDemo.exe\" \"%1\""
最后,在浏览器中输入 myTest://openMain即可打开程序WindowsDemo的主窗口。
参考:http://msdn.microsoft.com/zh-cn/library/aa767914(en-us,VS.85).aspx
转载于:https://www.cnblogs.com/JChenTech/archive/2011/03/09/1978036.html