Рабочий стол Win10 Тост Уведомление активный обратный вызов не срабатывает - PullRequest
0 голосов
/ 15 ноября 2018

Вопрос в том, что: у меня есть приложение WPF и я хочу отправить уведомление в стиле Win10.
Я искал все сайты, которые я знаю, и нашел способ MSDN сделать это: https://docs.microsoft.com/en-us/windows/uwp/design/shell/tiles-and-notifications/send-local-toast-desktop.
Но, к сожалению, я не использую установщик Wix, поэтому мне удалось создать ярлык другим способом: IShellLinkW .
Пока мне удается отправить тост. но я не могу получить обратный вызов при работе с ним.
Мой короткий код создания:

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 голосов
/ 09 февраля 2019

Наконец-то Я решил эту проблему, обнаружил, что это потому, что я передаю CLSID в строковом формате при создании ярлыка, но правильный способ - передать его как byte [], поэтому метод обратного вызова не работает.

...