Отключить элементы списка переходов в 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 в меню Пуск).
Мне известно, что эти списки хранятся в папке%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 для каждого файла).