2

我已经开发了一个 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-在windows-10/

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

我认为与默认行为就是这样的 UWP 应用程序相比,它的工作量太大,无需任何代码即可打开应用程序。

我如何在转换后的应用程序中打开应用程序并点击 toast 扔桥,就像真正的 UWP 一样?

谢谢。

4

3 回答 3

2

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

谢谢,斯特凡威克

于 2017-02-04T15:22:52.310 回答
2

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

为了解决这个问题,我使用了 Mutex,这样如果另一个实例已经存在,第二个实例就可以正常退出。toast 视觉参数基于 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();
            }
        }
    }
}

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

于 2017-03-22T03:24:15.267 回答
1

我认为与默认行为就是这样的 UWP 应用程序相比,它的工作量太大,无需任何代码即可打开应用程序。

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

  1. 使用桌面桥应用程序扩展文章中描述的协议关联
  2. 使用协议 ActivationType 启动相应的应用程序,参考自适应和交互式 toast 通知

我们需要注意的一些详细步骤:

  1. 在 Toast 通知的有效负载中使用协议激活类型: <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 文件中附加协议关联扩展

<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. 按照使用桌面桥手动将您的应用转换为 UWP以重新打包和重新签名您的应用

我在这里创建了一个示例

截图(gif):链接

于 2017-01-03T09:10:59.643 回答