2014-12-16 4 views
1

Я искал пример того, как открыть процесс, например notepad.exe, из html-элемента с использованием WPF и Awesomium 1.7.5. Идея заключается в том, что щелчок по элементу html вызывает метод C# с использованием javascript, насколько я понимаю API Awesomium. Тем не менее, все примеры, которые я могу найти, относятся к более ранней версии, которая теперь использует устаревшие функции ...Запустите notepad.exe с помощью html-кнопки с помощью Awesomium

Может ли кто-нибудь указать мне, как выполнить C# -код при запуске openNotepad()?

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

как это? http://www.codeproject.com/Articles/113678/How-to-execute-a-Local-File-using-HTML-Application – Izikon

+0

№ Awesomium основан на webkit, и только IE поддерживает ActiveXObject. Я обновил свой основной пост с текущим кодом C#. – NeoID

+0

Ваш код на C# выглядит хорошо, и он должен работать по назначению. С какими проблемами вы столкнулись, что не так? Вы получаете исключение? –

ответ

2

В соответствии с документацией Awesomium до Bind и JavascriptMethodHandler методы обработки событий Javascript изменились в версии 1.7.5.

JavascriptMethodEventHandler В настоящее время устаревшее и новое перегрузка пересылки следует использовать.

Теперь ваш код может выглядеть

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; 
} 

Note, есть пример использования новой перегрузки в конце Bind страницы документации.

отметить также, что метод Javascript в вашем образце фактически не вызывая app.openNotepad() метод, но alert("Run Notepad");

+0

Спасибо за последнее предложение! Я вижу, что я неправильно понял, как работает «CreateGlobalJavascriptObject»! Теперь я обновил свой главный пост, так что это рабочее решение. Надеюсь, это поможет другим. :) – NeoID

0

WshShell = новый ActiveXObject ("WScript.Shell");

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

+0

Вопрос OP о 'Awesomium'. Он основан на 'WebKit' и не поддерживает' ActiveXObject' –

 Смежные вопросы

  • Нет связанных вопросов^_^