【问题标题】:How to embed web application into windows app with custom behavior如何将 Web 应用程序嵌入到具有自定义行为的 Windows 应用程序中
【发布时间】:2015-09-01 22:02:30
【问题描述】:

我需要在 Windows 应用容器中嵌入一个标准的 webapp。

容器只需要成为 webkit 或类似渲染引擎的包装器(如果可能,我想避免使用 IE 渲染引擎)并且它会包含一些最小的窗口管理逻辑——比如没有标题栏的无边界、能够固定位置和大小,以及基于当前焦点窗口的自定义覆盖/始终在顶部规则。

我一直在研究 node-webkit,就包含 web 应用而言,它似乎符合要求,但我不确定我能否做到后者。

这可以用 node-webkit 来完成吗,还有其他方法更适合我的用例吗?我完全不知道 windows 应用程序开发是如何完成的,所以我希望能得到一些帮助。

【问题讨论】:

标签: c# winapi node-webkit win32gui window-managers


【解决方案1】:

如果您使用的是 WPF,则可以使用以下内容 (xaml) 创建窗口:

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        WindowStyle="None"
        Title="MainWindow" Left="100" Top="200" Height="350" Width="525" PreviewKeyDown="Window_PreviewKeyDown">
    <Grid x:Name="grdBrowserHost">
    </Grid>
</Window>

WindowStyle attr None 表示“无边界无标题栏”窗口。 LeftTop 用于位置,WidthHeight 是不言自明的。所有这些属性都可以通过简单的this.Width 等通过代码隐藏访问...PreviewKeyDown 我放在这里是因为在这个示例中(如您所见),Topmost 属性将从代码隐藏(动态)更改.

代码隐藏应该看起来像 使用系统;

using System.Windows;
using System.Windows.Input;

namespace WpfApplication2
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            System.Windows.Controls.WebBrowser browser = new System.Windows.Controls.WebBrowser();
            // you can put any other uri here, or better make browser field and navigate to desired uri on some event
            browser.Navigate(new Uri("http://www.blic.rs/")); 
            grdBrowserHost.Children.Add(browser);
        }

        private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Escape)
            {
                this.Close();
            }
            else
            {
                this.Topmost = !this.Topmost;
            }
        }
    }
}

在这个例子中,我创建了默认的WebBrowser 控件来显示html。如果您想要其他一些 Web 渲染引擎,您必须找到第 3 部分控件并将其包含在您的参考资料中。对于webkit,可以查看How to use WebKit browser control in WPF

【讨论】:

  • 嘿,谢谢,这看起来正是我需要的!还有一件事我不是很清楚 - 我如何挂钩系统窗口管理事件(例如窗口失去焦点),我可以查询窗口管理器给我当前聚焦的窗口吗?
  • 窗口 eq 的停用事件 this.Deactivated += (sender, e) => { ... } 对于当前聚焦的窗口,您可以使用 WINAPI 函数,例如 stackoverflow.com/questions/115868/…
【解决方案2】:

您需要的是“用于 Web 应用程序的 UWP 桥”;-)

查看 Windows 开发中心: UWP Bridge for web apps - Create your app now

【讨论】:

    猜你喜欢
    • 2011-01-18
    • 2015-04-05
    • 1970-01-01
    • 2019-09-21
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多