Windows XP, HKCU\...\LastVisitedMRU максимально допустимое количество элементов?

У меня есть сценарий, где мне нужно собрать скрипт, чтобы добавить запись в следующий раздел реестра для текущего пользователя:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedMRU\

Я пытаюсь выяснить максимальное количество значений, разрешенных в этом ключе, чтобы мой скрипт мог добавить еще один конец. Имена значений начинаются с начала алфавита, но я не хочу предполагать, что они заканчиваются на "Z".

Предыстория: мы переупаковываем проприетарное (т.е. не наше, у нас нет доступа к источнику) приложение и пытаемся установить его по умолчанию Файл -> Открыть местоположение. После многих болезненных снимков и сессий File/Regmon, похоже, это и есть способ сделать это. Я знаю, что это очень хакерски, но это работает, я проверил теорию вручную. Тем не менее, я, безусловно, открыт для предложений о том, как сделать это более Win32-дружественным способом - при условии, что приложение не имеет собственного лучшего механизма для этого.

3 ответа

Решение

Этот раздел реестра содержит для каждого исполняемого имени каталог, в котором это приложение в последний раз выполняло SaveAs (и, возможно, Save, я не уверен) в.

Каждая буква содержит информацию для одного исполняемого файла и MRUList держит порядок (это важно).

У меня максимум на "у" и мой MRUList является sxahmcjierfobglyuqpdtwvkn,

Из экспериментов, когда я делаю SaveAs из приложения, которое уже существует, оно просто заменяет информацию для этого письма и перемещает ее в начало MRUList,

Если приложения нет и не все буквы находятся в MRUList, он берет первое доступное письмо, помещает информацию в это письмо, а затем помещает это письмо в начале MRUList,

Если приложение отсутствует и используются все буквы, оно захватывает последнее на MRUListпомещает информацию в это письмо, а затем перемещает ее в начало MRUList,

Я отмечаю, что сохранение SaveAs для совершенно нового приложения не дает мне z буква, он повторно использует последний в "MRUList".

Сами ключи просто выглядят как UCS-2 (16-битный Unicode, ASCII с разбросанными нулевыми байтами в моей версии Windows для Австралии, ваш пробег может отличаться для международных вариантов), и они содержат исполняемое имя с нулевым символом в конце, затем терминируемое в конце каталог.

А что касается вашего комментария о том, что у вас нет доступа к источнику этого приложения, это не имеет значения. Это не то приложение, которое меняет эти ключи. ComDlg32 - это общие диалоги самой Windows (Open, SaveAs, Print setup и т. Д.).

Если вы хотите установить MRU для данного приложения, выполните следующие действия.

1 / Поиск этого приложения в буквенных ключах. Если вы найдете его, перейдите к шагу 3.

2 / Получите следующее доступное письмо, которого нет в MRUList, Если MRUList уже есть все буквы a через y или вы не уверены, что y всегда будет последним (это можно настроить где-то еще в реестре), возьмите последнюю букву, которая находится в конце MRUList,

3/ Теперь у вас есть ваше письмо. Измените или создайте этот буквенный ключ с данными UCS-2 для вашего приложения и каталога (оба заканчиваются нулем).

4 / Изменить MRUList положить ваше письмо впереди.

Там. Это должно сделать это.

Если я не понимаю вашу ситуацию, стандартный Windows OpenFileDialog должен иметь свойство с именем InitialDirectory, который указывает каталог, в котором должен открываться диалог.

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

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