2015-08-01 3 views
-1

Следующий код возвращает список Explorer, наиболее часто используемых папок в Windows 8 (проверка ошибок для наглядности):ВОССТАНОВЛЕНИЕ Explorer, в ОС Windows 10

CComPtr<IApplicationDocumentLists> pDocList; 
pDocList.CoCreateInstance(CLSID_ApplicationDocumentLists); 
pDocList->SetAppID(L"Microsoft.Windows.Explorer"); 
CComPtr<IObjectArray> pArray; 
pDocList->GetList(ADLT_FREQUENT, 0, IID_IObjectArray, (void**)&pArray); 

Это не работает в ОС Windows 10. pDocList является valid, и pArray действителен, но массив не содержит элементов, даже если в списке переходов Explorer есть вещи.

Я попытался получить недавний (а не часто) список документов, но это тоже не сработает, хотя в этом случае это GetList(), который терпит неудачу.

Кто-нибудь знает, что произошло здесь? Изменен ли идентификатор приложения для проводника?

+0

Это злоупотребление с помощью метода SetAppID. Вы должны установить его на свой собственный идентификатор приложения, а не на кого-то другого. Использование его для отслеживания чужого идентификатора приложения не поддерживается. –

ответ

0

ОК, по словам Раймонда Чена, человека, который, конечно же, знает, о чем он говорит, мы не должны это делать, поэтому мы этого не сделаем, и я благодарю Раймонда за его ответ.

У меня, правда, есть несколько комментариев.

  1. Документы не совсем ясны, что это так. Например, в документации для IApplicationDocumentLists.SetAppID говорится: «Приложение вызывает методы этого интерфейса, когда он хочет получить список последних или частых списков переходов». Примечание "a список прыжков", а не "его список прыжков".

  2. Нетрудно представить случаи, когда было бы полезно пользователю, если приложение может представить список папок, которые он часто использует в проводнике.

  3. Я не думаю, что это snooping, если мы посмотрим на ярлыки в последней папке пользователя. Как это по-другому?

В любом случае, еще раз спасибо за ваш отзыв, Раймонд. Мы найдем другой способ отслеживания частых папок от имени пользователя.

+0

Ярлыки в папке «Последние» также не документируются. Различные версии Windows упорядочивают их по-разному. –

1

Просто установите cItemsDesired.
pDocList->GetList(ADLT_FREQUENT, 99, IID_IObjectArray, (void**)&pArray);