在web中调用winform怎么弄

在web中调用winform怎么弄,第1张

在许多人的博客中可以看到有这样的小玩意, , 点击下就可以和博主进行对话,而且无需加博主为好友庆弯。很显然,这是腾讯在web页中的调用自己的QQ,那么他们是怎么做的呢?

我们先看一下腾讯给我们提供的代码:

<a href="tencent://message/?uin=88888888&Site=JooIT.com&Menu=yes">

<img border="0" SRC='http://is.qq.com/webpresence/images/status/01_online.gif' alt="点击这里给我发消息">

</a>

很显然,奥妙就在“tencent://message/?uin=215555521&Site=JooIT.com&Menu=yes”这里,那这又到底是什么原理呢?

我们想一下,如果要打开本地的QQ,肯定要分两步走,首先是定位到QQ,然后是传递给誉颤闷它一些参数,也就是“uin=uin=88888888&Site=JooIT.com&Menu=yes”这样的东西。定位的话,借助注册表是最明显的方式了。可怎么把QQ跑起来呢?要我们自己去启动一个进程么?(当然也可以,不过有更简单的何必呢),答案是否定的,Windows *** 作系统考虑了这一点,允许我们为自己的应用程序注册为一个协议处理者,具体参见MSDN上的文章《Registering

an Application to a URL Protocol》。

腾讯的Tencent://Message协议注册表如下:

知道了原理,那么我们照葫芦画瓢的做个DemoSA实验一下:

打开Visual Studio 2008(你也可以用其他的开发工具,Delphi,VB都可以),新建一个Windows

Forms项目,在默认的Form1里添加一个Label控件(这里是为了显示传递过来的参数用的,你也可以不这么做),在窗体的Load事件里写上如下代码:

this.label1.Text = strArgs//是Form1的声明为:Public的String类型变量

为了让我们的程序支持命令行参数(winform程序默认没有命令行参数),我们再到Programs.cs里对Main()函数进行改造。

改造后的代码如下:

[STAThread]

static void Main(string[] args)

{

Application.EnableVisualStyles()

Application.SetCompatibleTextRenderingDefault(false)

Form1 frm = new Form1()

if (args.Length >0)

{

frm.strArgs = args[0]

Application.Run(frm)

}

else

{

Application.Run(new Form1())

}

}

将项目编译。

好了,来到最关键的步骤了,在注册表中为我们自定义的helloworld协议建立起注册表项,从而让HelloWorld应用程序支持此协议。将如下的注册表项加入即可,这里为了简单起见我直接用一个.reg文件来实现,也可以用其他方式进行:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\HelloWorld]

@="HelloWorld Protocol"

"URL Protocol"=""

[HKEY_CLASSES_ROOT\HelloWorld\DefaultIcon]

@="D:\\My Documents\\Visual Studio 2005\\Projects\\HelloWorld\\release\\HelloWorld.exe,1"

[HKEY_CLASSES_ROOT\HelloWorld\shell]

@=""

[HKEY_CLASSES_ROOT\洞前HelloWorld\shell\open]

@=""

[HKEY_CLASSES_ROOT\HelloWorld\shell\open\command]

@="\"D:\\My Documents\\Visual Studio 2005\\Projects\\HelloWorld\\release\\HelloWorld.exe\" \"%1\""

好了,这下可以来测试helloworld协议了,在地址栏中输入:helloworld://hello world/,怎么样,下面的画面出来了吧,

再来到web页面进行测试,修改上面的html代码如下:

<html>

<head></head>

<body>

<div>

<a href="helloworld://hello world">

<img border="0" SRC='http://is.qq.com/webpresence/images/status/01_online.gif' alt="点击这里给我发消息">

</a>

</div>

</body>

</html>

若是要在web页面调用本地的winform程序,同理也是可行的。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Tencent]

@="TencentProtocol"

"URL Protocol"="D:\\Program Files\\Tencent\\QQ\\Timwp.exe"

[HKEY_CLASSES_ROOT\Tencent\DefaultIcon]

@="D:\\Program Files\\Tencent\\QQ\\Timwp.exe,1"

[HKEY_CLASSES_ROOT\Tencent\shell]

[HKEY_CLASSES_ROOT\Tencent\shell\open]

[HKEY_CLASSES_ROOT\Tencent\shell\open\command]@="\"D:\\Program Files\\Tencent\\QQ\\Timwp.exe\" \"%1\""

此注册表所实现的就是当浏览器(或其它)碰到 tencent://… 时,自动调用 Timwp.exe,并把 tencent://… 地址作为第一个参数传递给 Timwp.exe。

在WinForm中实现浏览器控件的external接口,这样就可以通过网页里的javascript调枝源用浏览器空间的

external接口,你所说的关机等 *** 作均可通过该接口公布给运行于浏览器中的网页,而网页在访问你的ASP.NET服务器.如果你仅是需要其功能而不是在浏览器中提供界面的话,则更简单,只需要在WinForm中使用WebClient直接调用你的ASP.NET服务器就败搭辩察缺行了

新建一个类,这漏悉个类里面的方法就是提拿肆供给JS调用的

[ComVisible(true)]

public class JSCall

{

public JSCall()

{

}

//此方法可在JS中调消搜轿用 ()

public void Test(string message)

{

MessageBox.Show(message)

}

}

然后把WebBrowser的ObjectForScripting属性设置成实例化成上面的类;

就是 webBrowser.ObjectForScripting = new JSCall()

最后在JS调用:window.external.Test(“JSTest”)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12283540.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存