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
, который указывает каталог, в котором должен открываться диалог.
Важны ли другие? Я хотел бы рассмотреть возможность удаления других или повторного использования первого или последнего. (Я бы также попробовал использовать любого персонажа, но, к счастью, это может сработать.)