桌面桥吐司打开应用程序

时间:2016-12-22 16:18:06

标签: c# .net uwp project-centennial desktop-bridge

我开发了一个WPF应用程序,我通过Desktop App Converter进行转换并运行正常。

我已在桌面应用中添加了调用UWP API的Toast通知,如https://blogs.msdn.microsoft.com/tiles_and_toasts/2015/10/16/quickstart-handling-toast-activations-from-win32-apps-in-windows-10/

所述

但是当用户点击吐司时能够自动打开应用程序,我必须创建一个快捷方式并注册一个COM组件,方法与https://github.com/WindowsNotifications/desktop-toasts相同,也可以。

我认为与UWP应用程序相比,其工作量太大,默认行为就是这样,打开应用程序时没有任何代码。

我怎样才能打开应用程序在我转换的应用程序中点击toast投掷Bridge,就像真正的UWP一样?

感谢。

3 个答案:

答案 0 :(得分:2)

它实际上比这更简单。使用Desktop Bridge后,您可以像使用UWP应用程序一样创建Toast。单击吐司将以正确的模式启动Desktop Bridge应用程序。我最近发布了几个这样做的样本。您可以从Windows应用商店下载它们并在GitHub上找到源代码。链接和更多详细信息在此blog post中。如果这没有用,请告诉我。如果需要,我可以在WPF中为此发送更简洁的“hello world”样本。

谢谢, 斯蒂芬威克

答案 1 :(得分:2)

我发现(在我的情况下是一个手动转换的WinForms应用程序)Toast通知(使用协议或前台激活)启动应用程序的新实例。当用户与Toast交互时应用程序未运行时,这很好。但是如果应用程序正在运行则很糟糕。

为了解决这个问题,我已经开始使用Mutex了,如果另一个实例已经存在,第二个实例可以正常退出。 toast visual参数基于Main,就好像它们是命令行参数一样。

我在GitHub上使用了几个助手来做这个:https://github.com/dkackman/DesktopBridgeEnvironment

所以我的Main看起来像这样(其中SingleInstanceExecutionEnvironment是辅助类型)

static void Main(string [] args)
{
    using (var instance = new SingleInstance(ExecutionEnvironment.Current.AppId))
    {
        if (instance.IsFirstInstance)
        {
            ExecutionEnvironment.Current.StartupArgs = args;

            HockeyClient.Current.Configure("xxxxxxxxxxxxxxxxxxx");

            try
            {
                HockeyClient.Current.SendCrashesAsync();
            }
            catch { }

            using (var program = new Program())
            {
                program.Show();
            }
        }
    }
}

在程序的其他地方,检查启动args以查看如何处理通知(如果有)。有点蛮力,但如果没有生成多个应用实例,我无法以任何其他方式工作。

答案 2 :(得分:1)

  

我认为与UWP应用程序相比,其工作量太大,默认行为就是这样,打开应用程序时没有任何代码。

有一个简单解决方案,技术要点如下:

  1. 使用Desktop Bridge app extensions文章
  2. 中描述的协议关联
  3. 使用协议ActivationType启动相应的应用,参考Adaptive and interactive toast notifications
  4. 我们需要注意的一些详细步骤:

    1. 在Toast通知的有效负载中使用protocal激活类型: <toast activationType='protocol' launch='mytoastsample:'> <visual> <binding template='ToastGeneric'> <text>Click to launch Wpf Toast Sample</text> </binding> </visual> </toast>

    2. 将应用程序转换为UWP应用程序后,我们需要打开Output目录并找到AppxManifest.xml文件。

    3. 在AppxManifest.xml文件中附加协议关联扩展

    4. <Application Id="WpfToastSample" Executable="WpfToastSample.exe" EntryPoint="Windows.FullTrustApplication"> <uap:VisualElements DisplayName="WpfToastSample" Description="WpfToastSample" BackgroundColor="#777777" Square150x150Logo="Assets\SampleAppx.150x150.png" Square44x44Logo="Assets\SampleAppx.44x44.png" /> <Extensions> <uap3:Extension Category="windows.protocol"> <uap3:Protocol Name="mytoastsample" Parameters="/p &quot;%1&quot;" /> </uap3:Extension> </Extensions> </Application>

      1. 关注Manually convert your app to UWP using the Desktop Bridge重新包装和停止您的应用
      2. 我在here

        中创建了一个示例

        屏幕截图(gif):LINK