C# winform与Javascript的相互调用

<html>
<head>
    <meta http-equiv="Content-Language" content="zh-cn">
    <script language="javascript" type="text/javascript">
<!-- 提供给C#程序调用的方法 -->
function messageBox(message)
{
    alert(message);
}
</script>
</head>
<body>
    <!-- 调用C#方法 -->
    <button οnclick="window.external.MyMessageBox('javascript访问C#代码')">
        javascript访问C#代码</button>
</body>
</html><html>
<head>
    <meta http-equiv="Content-Language" content="zh-cn">
    <script language="javascript" type="text/javascript">
<!-- 提供给C#程序调用的方法 -->
function messageBox(message)
{
    alert(message);
}
    </script>
</head>
<body>
    <!-- 调用C#方法 -->
    <button οnclick="window.external.MyMessageBox('javascript访问C#代码')">
        javascript访问C#代码</button>
</body>
</html>
 
二、建立Windows应用程序
 
1.创建Windows应用程序项目 
2.在Form1窗体中添加WebBrowser控件 
3.在Form1类的上方添加
 
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
这是为了将该类设置为com可访问。如果不进行该声明将会出错。
 
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public partial class Form1 : Form
 
 
Url属性:WebBrowser控件显示的网页路径
 
ObjectForScripting属性:该对象可由显示在WebBrowser控件中的网页所包含的脚本代码访问。
 
将Url属性设置为需要进行操作的页的URL路径。
 
JavaScript通过window.external调用C#公开的方法。即由ObjectForScripting属性设置的类的实例中所包含的公共方法。具体设置例子如下: 
 
 
System.IO.FileInfo file = new System.IO.FileInfo("index.htm");
// WebBrowser控件显示的网页路径
webBrowser1.Url = new Uri(file.FullName);
// 将当前类设置为可由脚本访问
webBrowser1.ObjectForScripting = this;
 
 
5.C#调用JavaScript方法
 
通过WebBrowser类的Document属性中的InvokeScript方法调用当前网页的Javascript方法。如: 
 
// 调用JavaScript的messageBox方法,并传入参数
object[] objects = new object[1];
objects[0] = "C#访问JavaScript脚本";
webBrowser1.Document.InvokeScript("messageBox", objects);
 
 
完整代码如下: 
 
 
==============================================================================
 
JS脚本代码: 
<script language=”javascript”>
function jsAlert(infor)
{
alert(‘我要开网店、携购独立网店系统,模板最全,最专业的系统!’);
return;
}
</script>
  C#代码调用如下:
  using System.Security.Permissions; 
  [PermissionSet(SecurityAction.Demand, Name = "FullTrust")]//  注意: 类定义前需要加上下面两行,否则调用失败!
  [System.Runtime.InteropServices.ComVisibleAttribute(true)] 
 
  调用的函数:
  webBrowser1.Document.InvokeScript("jsAlert ", new string[] {‘ssss’}); 
 
  JS中调用C#函数示例:
 
  C#函数如下:
 
public void ShowMessage(string message)
{
MessageBox.Show(message);
}
 
  JS里的调用方法:
 
<script language=”javascript”>
function InvokeFunc()
{
window.external.ShowMessage(‘呵呵’);
}
</script>
 
  在使用C#开发winform程序过程中,我们经常会碰到嵌入了一个WebBrowser的浏览器控件。很多时候,我们需要在程序里控制网页的显示方式,或者调用网页当中的某个JS函数,反过来,也有可能网页也需要调用程序当中的函数来实现某些功能。下面我给大家讲解下如何互相进行交互。
===========================================================================================================
能否定义一个c# 变量获取js里面定义的 全局变量的指向
JScript code
 
 
<script language="javascript"type="text/javascript">
varg_h=55;
 
functiondisplayVar(varname)
{
try
{
returneval(varname);
}
catch(e)
{
returne.description;
}
}
</script>
 
 
 
c#里面能否实现获取g_h变量指向的内存空间,然后修改他的值。
我现在只能实现,显示他的值,因为eval方法返回了一个新的对象,所以改变不了原来的变量g_h
C# code
 
 
object[] paramArray=newobject[1];
paramArray[0]="g_h";
webBrowser1.Document.InvokeScript("displayVar", paramArray);
 
 
也可以用这样来调用:
webBrowser1.Document.InvokeScript("JS函数名", New Object() {参数})
参数值用:多个参数用分”,“号分开 。
例如:
webBrowser1.Document.InvokeScript("Go", New Object() {"home","back"})
 
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
与脚本的互操作 
 
在Case 1当中,我们已经看到,Web页面的HTML元素的事件,可以由Windows Form端来响应,可以在某种程度上看作是Web页面调用WinForm;那么反过
 
来,WinForm除了可以直接访问Web页面的HTML元素之外,能否调用Web页面里的各种Script呢?
 
首先是调用Web页面的脚本中已经定义好的函数。假设HTML中有如下Javascript:
 
function DoAdd(a, b) {
    return a + b;
}
那么,我们要在WinForm调用它,只需如下代码即可:
 
object oSum = webBrowser.Document.InvokeScript("DoAdd", new object[] { 1, 2 });
int sum = Convert.ToInt32(oSum);
其次,如果我们想执行一段Web页面中原本没有的脚本,该怎么做呢?这次.Net的类没有提供,看来还要依靠COM了。IHTMLWindow2可以将任意的字符
 
串作为脚本代码来执行。
 
string scriptline01 = @"function ShowPageInfo() {";
string scriptline02 = @"      var numLinks = document.links.length; ";
string scriptline03 = @"      var numForms = document.forms.length; ";
string scriptline04 = @"      var numImages = document.images.length; ";
string scriptline05 = @"      var numScripts = document.scripts.length; ";
string scriptline06 = @"      alert('网页的统计结果:\r\n链接数:' + numLinks + ";
string scriptline07 = @"         '\r\n表单数:' + numForms + ";
string scriptline08 = @"         '\r\n图像数:' + numImages + ";
string scriptline09 = @"         '\r\n脚本数:' + numScripts);}";
string scriptline10 = @"ShowPageInfo();";
 
string strScript = scriptline01 + scriptline02 + scriptline03 + scriptline04 + scriptline05 +
                    scriptline06 + scriptline07 + scriptline08 + scriptline09 + scriptline10;
 
IHTMLWindow2 win = (IHTMLWindow2)webBrowser.Document.Window.DomWindow;
win.execScript(strScript, "Javascript")
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用C#WinForms来调用摄像头。首先,确保你的计算机上已经安装了摄像头设备,并且已经安装了适当的驱动程序。 接下来,你可以使用`System.Windows.Forms`命名空间中的`PictureBox`和`VideoCapture`类来实现这个功能。下面是一个简单的示例代码: ```csharp using System; using System.Windows.Forms; using Emgu.CV; using Emgu.CV.Structure; namespace CameraCapture { public partial class MainForm : Form { private VideoCapture capture; public MainForm() { InitializeComponent(); } private void MainForm_Load(object sender, EventArgs e) { // 初始化摄像头 capture = new VideoCapture(); // 设置图像控件作为视频捕获窗口 capture.ImageGrabbed += Capture_ImageGrabbed; // 开始捕获 capture.Start(); } private void Capture_ImageGrabbed(object sender, EventArgs e) { // 获取当前帧图像 Mat frame = new Mat(); capture.Retrieve(frame); // 在PictureBox中显示图像 pictureBox.Image = frame.ToBitmap(); } private void MainForm_FormClosing(object sender, FormClosingEventArgs e) { // 停止捕获并释放资源 capture.Stop(); capture.Dispose(); } } } ``` 在这个示例中,我们创建了一个`MainForm`类,继承自`Form`,并在窗体的加载事件中初始化了摄像头,并将当前帧图像显示在一个名为`pictureBox`的`PictureBox`控件中。在窗体关闭事件中停止捕获并释放资源。 请注意,上述示例使用了Emgu.CV库来实现摄像头调用。你可以使用NuGet包管理器来安装Emgu.CV库,并在代码中引用它。 希望这个简单的示例能帮助你开始使用C# WinForms调用摄像头!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值