我开发了一个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一样?
感谢。
答案 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看起来像这样(其中SingleInstance
和ExecutionEnvironment
是辅助类型)
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应用程序相比,其工作量太大,默认行为就是这样,打开应用程序时没有任何代码。
有一个简单解决方案,技术要点如下:
我们需要注意的一些详细步骤:
在Toast通知的有效负载中使用protocal激活类型:
<toast activationType='protocol' launch='mytoastsample:'>
<visual>
<binding template='ToastGeneric'>
<text>Click to launch Wpf Toast Sample</text>
</binding>
</visual>
</toast>
将应用程序转换为UWP应用程序后,我们需要打开Output目录并找到AppxManifest.xml文件。
在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 "%1"" />
</uap3:Extension>
</Extensions>
</Application>
我在here
中创建了一个示例屏幕截图(gif):LINK