使用Awesomium从html按钮运行notepad.exe

时间:2014-12-16 07:56:02

标签: c# wpf awesomium

我一直在寻找一个如何使用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>

2 个答案:

答案 0 :(得分:2)

根据对BindJavascriptMethodHandler的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);