Windows XP, HKCU \ ... \ LastVisitedMRU максимально допустимое количество элементов? - PullRequest
2 голосов
/ 06 мая 2009

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

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

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

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

Ответы [ 3 ]

8 голосов
/ 12 мая 2009

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

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

У меня максимальный уровень "y", а мой MRUList равен sxahmcjierfobglyuqpdtwvkn.

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

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

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

Я отмечаю, что выполнение SaveAs для совершенно нового приложения не дает мне письмо z, оно повторно использует последнее в `MRUList '.

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

А что касается вашего комментария о том, что у вас нет доступа к источнику этого приложения, это не имеет значения. Это не то приложение, которое меняет эти ключи. ComDlg32 - это общие диалоговые окна самой Windows («Открыть», «Сохранить как», «Настройка печати» и т. Д.).

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

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

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

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

4 / Измените MRUList, чтобы поместить ваше письмо впереди.

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

2 голосов
/ 06 мая 2009

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

0 голосов
/ 16 мая 2009

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

...