我有一个需要将脚本添加到当前用户的以下注册表项中的条目的脚本:

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


我试图找出此键中允许的最大数量的值,以便我的脚本可以将另一个值附加到最后。值名称从字母的开头开始,但是我不希望它们以“ Z”结尾。

背景:我们正在重新打包专有(即不是我们自己的,我们无权访问源代码)应用程序,并尝试设置其默认文件->打开位置。经过许多痛苦的快照和文件/注册会话之后,这似乎是实现此目的的方法。我知道这是非常骇人听闻的,但是它确实有效,我已经手动测试了该理论。就是说,我很乐意接受有关如何以一种更加Win32友好的方式进行操作的建议-假设应用程序本身没有更好的机制来执行此操作。

最佳答案

对于每个可执行文件名称,此注册表项保存该应用程序上次执行其SaveAs(也许不确定的Save)的目录。

每个字母保存一个可执行文件的信息,而MRUList保存顺序(这很重要)。

我的最大数量是“ y”,而我的MRUListsxahmcjierfobglyuqpdtwvkn

通过实验,当我从已经存在的应用程序中执行SaveAs时,它仅替换该字母的信息并将其移动到MRUList的前面。

如果应用程序不存在,并且不是所有字母都在MRUList中,它将获取第一个可用字母,将信息放入该字母中,然后将该字母放在MRUList的开头。

如果应用程序不存在,并且所有字母均已使用,它将在MRUList上抓住最后一个字母,将信息放入该字母中,然后将其移动到MRUList的前面。

我注意到为一个全新的应用程序执行SaveAs不会给我z字母,而是重新使用了'MRUList'中的最后一个字母。

密钥本身就像UCS-2(16位Unicode,在我的澳大利亚版本的Windows中带有散置的空字节的ASCII,对于国际变体而言,您的里程可能有所不同),并且它们包含以空值终止的可执行文件名,然后是以空值终止的文件名。目录。

关于您对无法访问该应用程序源的评论,也没关系。不是那个应用程序更改了那些键。 ComDlg32是Windows本身的常用对话框(打开,另存为,打印设置等)。

如果要为给定的应用程序设置MRU,请按照下列步骤操作。

1 /在字母键中搜索该应用程序。如果找到它,请转到步骤3。

2 /获取不在MRUList中的下一个可用字母。如果MRUList已经包含所有ay字母,或者您不确定y始终是最后一个字母(可以在注册表中的其他位置进行配置),请抓住最后一个字母在MRUList的末尾。

3 /现在您收到了信。使用您的应用程序和目录的UCS-2数据更改或创建该字母密钥(均为空值)。

4 /更改MRUList将字母放在最前面。

那里。那应该做。

10-05 22:37