Windows XP,HKCU\...\LastVisitedMRU允许的最大项目数?

Way*_*rts 2 registry winapi windows-xp mru comdlg32

我有一个场景,我需要将一个脚本放在一起,为当前用户添加以下注册表项的条目:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedMRU\
Run Code Online (Sandbox Code Playgroud)

我试图找出此密​​钥中允许的最大值数,以便我可以将我的脚本添加到另一个上.值名称从字母表的开头开始,但我不想假设它们以"Z"结尾.

背景:我们正在重新打包专有(即不是我们自己的,我们无权访问源)应用程序并尝试设置其默认文件 - >打开位置.经过许多痛苦的快照和文件/ Regmon会话之后,这似乎就是这样做的.我知道它非常hackish但它确实有效,我已经手动测试了这个理论.也就是说,我肯定愿意接受有关如何以更加Win32友好的方式执行此操作的建议 - 假设应用程序没有自己的更好的机制来执行此操作.

pax*_*blo 8

对于每个可执行文件名,此注册表项包含该应用程序最后执行其SaveAs(可能是Save,我不确定)的目录.

每个字母包含一个可执行文件的信息并MRUList保存订单(这很重要).

我的最大值是"y"而我的MRUListsxahmcjierfobglyuqpdtwvkn.

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

如果应用程序不存在而且并非所有字母都在其中MRUList,它会抓取第一个可用的字母,将信息放入该字母,然后将该字母放在该字母的前面MRUList.

如果应用程序不存在并且所有字母都被使用,它会抓取最后一个MRUList字母,将信息放入该字母,然后将其移动到该字母的前面MRUList.

我注意到为一个全新的应用程序做一个SaveAs并没有给我这z封信,它重新使用了`MRUList'中的最后一个.

密钥本身看起来像UCS-2(16位Unicode,我的澳大利亚版Windows中带有散布空字节的ASCII,您的里程可能因国际变体而异)并且它们保存以空值终止的可执行文件名,然后是空终止的目录.

关于您无法访问该应用程序源代码的评论,这无关紧要.这不是应用程序更改这些键.ComDlg32是Windows本身的常见对话框(Open,SaveAs,Print setup等).

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

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

2 /获取下一个不在的字母MRUList.如果MRUList已经包含了所有的字母a,y 或者您不确定y它将永远是最后一个(它可以在注册表中的其他位置配置),请抓住最后一个字母MRUList.

3 /现在你收到了你的来信.使用应用程序和目录的UCS-2数据更改或创建该字母键(均以空值终止).

4 /改变MRUList把你的信放在前面.

那里.应该这样做.