Расширение оболочки: DragQueryFile возвращает максимум 16 (в Windows 7) - PullRequest
3 голосов
/ 02 марта 2010

Я написал расширение оболочки (руководствуясь Полным руководством идиота по написанию расширений оболочки ), которое работало как должно, пока я не обновился до Windows 7 (32-битная версия).

Теперь функция DragQueryFile

UINT uNumFiles = DragQueryFile(hDrop,0xFFFFFFFF,NULL,0);

возвращает правильное количество выбранных файлов до тех пор, пока число не станет больше 16. Затем всегда возвращается 16.

Я тестировал его в XP (32) и Vista (32), там он работает, в Windows7 (32/64) нет.

Есть идеи?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 02 сентября 2012

Метод IShellExtInit.Initialize () вызывается еще раз, с полным списком файлов, после вызова вашей команды, непосредственно перед вызовом оболочки IContextMenu.InvokeCommand (). Тогда у вас есть возможность снова собрать список файлов. Вы просто не можете рассчитывать на количество файлов при первом вызове Initialize (), поэтому не показывайте его в элементе контекстного меню, если оно превышает 16.

1 голос
/ 10 августа 2016

Я видел несколько сообщений, в которых говорится о ограничении 16 файлов в проводнике и утверждается, что проблема решена путем изменения значения реестра MultipleInvokePromptMinimum . В этом нет необходимости, поскольку полный список файлов извлекается во втором вызове непосредственно перед вызовом функции invokeCommand . Я подтвердил эту идею, записав в ключ реестра все файлы, прочитанные в функции инициализации, после удаления этого ключа реестра. Таким образом, список файлов обновляется каждый раз, когда вызывается инициализация.

...