Отключить элементы списка переходов в Windows 7 для документов Office, созданных VBA

Я программно генерирую документы Office (в моем случае Word или Excel 2007), используя автоматизацию в VBA (в этом примере MS Access 2007, но это не должно сильно измениться) под Windows 7. Это работает нормально.

Поскольку документы генерируются автоматически, я не хочу, чтобы они отображались в последних списках. Для недавнего списка в Word я могу просто добавить "AddToRecentFiles:=False" при сохранении документа (см. Пример), или я мог удалить записи впоследствии через "Application.RecentFiles ..."

Мой код

Set objWord = CreateObject("Word.Application")

Set curDocument = objWord.Documents.Add

curDocument.SaveAs FileName:=Folder + "text.doc", FileFormat:=wdFormatDocument, 
            AddToRecentFiles:=False
curDocument.Close

Проблема в том, что я не смог найти способ отключить недавние списки из Windows 7 (то есть список переходов с последними элементами на панели задач для Word или последними использованными папками в Проводнике и недавний список для Word в меню Пуск). Пример Windows7-Jumplist для Word 2007, заполненные ссылками на автоматически сгенерированные документы

Мне известно, что эти списки хранятся в папке%APPDATA%\Microsoft\Windows\Recent\AutomaticDestitions, и я обнаружил, что для управления Jumplist существует "WindowsAPICodePack" (который я не могу использовать из VBA, верно?).

Чтобы добавить элемент в недавний список, я могу использовать старый API SHAddToRecentDocs из библиотеки "shell32.dll", но удаление с помощью этой функции API больше не работает, так как кажется, что оно влияет только на записи в старой папке "/ Recent" (и даже удаляет все, что не является моим намерением). Представляется, что в презентациях по API панели задач Windows 7 тоже только упоминается, как добавлять элементы, но не как избежать этого или удалять определенные записи.

Я что-то упустил или нет - легкий и идеально подходящий для использования в VBA - способ манипулировать (или временно отключать) записи Windows 7?

С уважением, Андреас

1 ответ

Решение

Я столкнулся с подобной проблемой, когда программно работал с Word и другими офисными документами с Sharepoint.

Вы можете получить доступ к объекту JumpList через библиотеку PresentationFramework (.Net 4) или WindowsAPICodePack для 3.5 (и, возможно, ранее), однако не существует способа программного удаления JumpListItems.

Я нашел сообщение, в котором говорится, что вы можете отключить Word от добавления элементов в JumpList через раздел реестра. http://www.add-in-express.com/forum/read.php?PAGEN_1=2&FID=5&TID=8124 Это не должно быть слишком сложно сделать программно (если у вас есть права администратора на машине, генерирующей документы).

У меня не было возможности проверить, работает ли это еще. Если вы найдете более элегантное решение, пожалуйста, дайте мне знать!

Обновление: в моем решении я закончил создание списка переходов на основе списка последних файлов Word (я перебрал в обратном направлении внутренний список последних файлов Word и вызвал метод JumpList.AddToRecent для каждого файла).

Другие вопросы по тегам