我有一个场景,我需要整理一个脚本,为当前用户添加以下注册表项的条目:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedMRU\
我试图找出此密钥中允许的最大值数,以便我可以将我的脚本添加到另一端。值名称从字母表的开头开始,但我不想假设它们以“Z”结尾。
背景:我们正在重新打包专有(即不是我们自己的,我们无权访问源)应用程序并尝试设置其默认文件 - >开放的位置。经过许多痛苦的快照和文件/ Regmon会话之后,这似乎就是这样做的。我知道它非常hackish但它确实有效,我已经手动测试了这个理论。也就是说,我肯定愿意接受有关如何以更加Win32友好的方式执行此操作的建议 - 假设应用程序没有更好的机制来执行此操作。
答案 0 :(得分:8)
对于每个可执行文件名,此注册表项包含该应用程序最后执行其SaveAs(可能是Save,我不确定)的目录。
每个字母包含一个可执行文件的信息,MRUList
保存订单(这很重要)。
我的最大值为“y”,我的MRUList
为sxahmcjierfobglyuqpdtwvkn
。
从实验开始,当我从已经存在的应用程序执行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
已经包含所有字母MRUList
到a
或,则您不确定y
将永远是最后一个({1}}可以在注册表中的其他位置配置),抓住y
末尾的最后一个字母。
3 /现在你收到了你的来信。使用应用程序和目录的UCS-2数据(均为空终止)更改或创建该字母键。
4 /更改MRUList
以将您的信件放在前面。
有。应该这样做。
答案 1 :(得分:2)
除非我误解你的情况,否则标准的Windows OpenFileDialog应该有一个名为InitialDirectory
的属性,它指定对话框应该打开的目录。
答案 2 :(得分:0)
其他的重要吗?我会考虑放弃其他人,或重新使用第一个或最后一个。 (我也会尝试使用任何角色,虽然运气不错但可能有用。)