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

时间:2009-05-06 01:07:05

标签: winapi windows-xp registry mru comdlg32

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

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

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

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

3 个答案:

答案 0 :(得分:8)

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

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

我的最大值为“y”,我的MRUListsxahmcjierfobglyuqpdtwvkn

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

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

如果应用程序不在那里且使用了所有字母,它会抓取MRUList上的最后一个字母,将信息放入该字母,然后将其移到MRUList的前面

我注意到为一个全新的应用程序执行SaveAs并没有给我MRUList字母,它重新使用了`MRUList'中的最后一个。

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

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

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

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

2 /获取不在z中的下一个可用字母。如果MRUList已经包含所有字母MRULista ,则您不确定y将永远是最后一个({1}}可以在注册表中的其他位置配置),抓住y末尾的最后一个字母。

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

4 /更改MRUList以将您的信件放在前面。

有。应该这样做。

答案 1 :(得分:2)

除非我误解你的情况,否则标准的Windows OpenFileDialog应该有一个名为InitialDirectory的属性,它指定对话框应该打开的目录。

答案 2 :(得分:0)

其他的重要吗?我会考虑放弃其他人,或重新使用第一个或最后一个。 (我也会尝试使用任何角色,虽然运气不错但可能有用。)