桌面Win10 Toast Notification活动回调未触发

时间:2018-11-15 02:13:40

标签: c# wpf desktop windows-10-desktop

问题是:我有一个 WPF 应用程序,想发送Win10样式通知。
我搜索了所有我知道的网站,并找到了实现该目标的MSDN方法:https://docs.microsoft.com/en-us/windows/uwp/design/shell/tiles-and-notifications/send-local-toast-desktop
但不幸的是,我没有使用Wix安装程序,因此我设法以另一种方式创建了快捷方式: IShellLinkW
到目前为止,我成功发送了Toast。但对其进行操作时无法获得回调。
我的创建快捷方式代码:

using (PropVariant appId = new PropVariant(_aumid))
{
    ErrorHelper.VerifySucceeded(newShortcutProperties.SetValue
    (
        new PropertyKey(new Guid("9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3"), 5), appId)
    );
}

效果很好,因此 SetValue 方法应该可以
我想我可以用同样的方法使回调方法及其GUID终止:

var toastclass = typeof(T).GUID.ToString();
using (PropVariant toastid = new PropVariant(toastclass))
{
    toastid.SetEnum(VarEnum.VT_CLSID);
    ErrorHelper.VerifySucceeded
    (
        newShortcutProperties.SetValue
        (
            new PropertyKey(new Guid("9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3"), 26), toastid
        )
    );
}
ErrorHelper.VerifySucceeded(newShortcutProperties.Commit());

我以此方式注册

// Register type
var regService = new RegistrationServices();

regService.RegisterTypeForComClients
(
    typeof(T),
    RegistrationClassContext.LocalServer,
    RegistrationConnectionType.MultipleUse
);

_registeredActivator = true;

但最终回调方法未触发

[ClassInterface(ClassInterfaceType.None)]
[ComSourceInterfaces(typeof(INotificationActivationCallback))]
[Guid("9a88b91d-f9c4-4c63-91dd-175c2c2cb458"), ComVisible(true)]
public class AreaIconToast : NotificationActivator
{

1 个答案:

答案 0 :(得分:1)

最后我解决了这个问题,我发现这是因为在创建快捷方式时我以字符串格式传递了CLSID,但是正确的方法是将其作为byte []传递,因此这就是回调的原因方法不起作用。