使用Awesomium从html按钮运行记事本.exe



我一直在寻找一个关于如何使用WPF和Awesomium 1.7.5从html元素打开记事本.exe等进程的示例。这个想法是,据我所知,单击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>

根据 Awesomium 文档 to Bind 和 JavascriptMethodHandler,处理 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;
}

请注意,在绑定文档页面的末尾有使用新重载的示例。

另请注意,示例中的 javascript 方法实际上并没有调用app.openNotepad()方法,而是alert("Run Notepad");

WshShell = new ActiveXObject("WScript.Shell");

WshShell.Run("c:/windows/system32/notepad.exe", 1, false);

最新更新