我一直在寻找一个如何使用WPF和Awesomium 1.7.5从html元素打开像notepad.exe这样的进程的示例。我的想法是,就我理解的Awesomium API而言,单击一个html元素会使用javascript触发一个C#方法。但是,我能找到的所有示例都引用了现在使用过时函数的早期版本......
有人可以提供一个关于如何在触发openNotepad()时执行C#代码的示例吗?
HTML:
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<button onclick="app.openNotepad()">This button will open Notepad</button>
</body>
</html>
C#:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
webControl.Source = new Uri("index.html");
}
private void webControl_DocumentReady(object sender, DocumentReadyEventArgs e)
{
BindMethods(webControl);
}
private void BindMethods(IWebView _webView)
{
JSValue result = webControl.CreateGlobalJavascriptObject("app");
if (result.IsObject)
{
JSObject appObject = result;
appObject.Bind("openNotepad", openNotepad);
}
}
private JSValue openNotepad(object obj, JavascriptMethodEventArgs jsMethodArgs)
{
Process.Start("notepad.exe");
return null;
}
}
XAML:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:awe="http://schemas.awesomium.com/winfx" x:Class="Omega.MainWindow"
Title="Omega" Height="350" Width="525" WindowStartupLocation="CenterScreen" WindowState="Maximized" ResizeMode="NoResize" Topmost="True" WindowStyle="None">
<Grid>
<awe:WebControl x:Name="webControl" DocumentReady="webControl_DocumentReady" />
</Grid>
</Window>
答案 0 :(得分:2)
根据对Bind和JavascriptMethodHandler的Awesomium文档,处理Javascript事件的方法在1.7.5版本中已更改。
JavascriptMethodEventHandler现已过时,应使用新的Bind重载。
现在您的代码看起来像
private void BindMethods(IWebView _webView)
{
JSValue result = webControl.CreateGlobalJavascriptObject("app");
if (result.IsObject)
{
JSObject appObject = result;
appObject.Bind("openNotepad", openNotepad);
}
}
private JSValue openNotepad(object obj, JavascriptMethodEventArgs jsMethodArgs)
{
Process.Start("notepad.exe");
return null;
}
请注意,在Bind文档页面末尾有一个使用新重载的示例。
另请注意,示例中的javascript方法实际上并未调用app.openNotepad()
方法,而是alert("Run Notepad");
答案 1 :(得分:0)
WshShell = new ActiveXObject(“WScript.Shell”);
WshShell.Run(“c:/windows/system32/notepad.exe”,1,false);