Уведомить Windows 10 об изменениях в меню «Пуск» - PullRequest
0 голосов
/ 27 июня 2018

У меня есть приложение, которое иногда динамически добавляет и удаляет записи из меню «Пуск» (и рабочего стола), помещая ярлыки (созданные с помощью WshShellClass) в папку меню «Пуск» (Environment.SpecialFolder.StartMenu). Если происходят такие изменения, я уже уведомляю оболочку об изменениях, используя SHChangeNotify, как описано здесь . В частности:

    private static void _RefreshWindowsDesktop()
    {
        // http://stackoverflow.com/a/647286/1600

        NativeMethods.SHChangeNotify(NativeMethods.HChangeNotifyEventID.SHCNE_ASSOCCHANGED,
                                     NativeMethods.HChangeNotifyFlags.SHCNF_FLUSH,
                                     IntPtr.Zero, IntPtr.Zero);
    }

Однако в Windows 10 поиск в меню «Пуск» часто прерывается (я никогда не видел такого поведения в Windows Vista или 7), где новый ярлык часто не отображается в течение нескольких дней, и в В свою очередь, старый ярлык, который был удален несколько дней назад, все еще отображается как «результат поиска». Вероятно, это связано с изменениями, заставляющими современные приложения появляться в меню «Пуск» вместе с классическими настольными приложениями, но я не уверен; онлайн руководства по этому вопросу откровенно поразят меня как вуду.

Хуже того, при вызове этого ярлыка Windows 10 просто не делает ничего - нет ошибки, указывающей, что ярлык нигде (потому что он не существует), а также Windows не изучает и не удаляет его впоследствии.

Итак, я надеюсь, что есть метод, похожий на SHChangeNotify, чтобы явно указать Windows 10, что нужно сделать недействительным или перестроить кэш меню «Пуск», например, попросить его переиндексировать эту конкретную папку или попросить вручную добавить / удалить элемент из индекс.

Мое приложение - WPF, но если существует собственный метод, я могу определить версию ОС и затем условно вызвать ее. (Или даже написать внешнее фоновое приложение UWP для Windows 10 для запуска при необходимости.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...