我有一个场景,我需要把一个脚本放在一起,为当前用户的以下注册表项添加一个条目:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedMRU\我试图找出这个键允许的值的最大数量,以便我可以让我的脚本在末尾添加另一个值。值名称从字母表的开头开始,但我不想假设它们以"Z“结束。
背景:我们正在重新打包一个专有的(即不是我们自己的,我们没有访问源代码的权限)应用程序,并尝试设置它的默认文件->打开位置。在经历了许多痛苦的快照和File/Regmon会话之后,这似乎是实现这一点的方法。我知道这很奇怪,但它确实有效,我已经手动测试过这个理论。这就是说,我当然愿意接受关于如何以一种对Win32更友好的方式来实现这一点的建议-前提是应用程序本身没有更好的机制来实现这一点。
发布于 2009-05-12 04:45:46
对于每个可执行文件名称,此注册表项保存该应用程序最后一次执行其SaveAs (可能是Save,我不确定)的目录。
每个字母保存一个可执行文件的信息,MRUList保存顺序(这一点很重要)。
我的最大值是"y“,我的MRUList是sxahmcjierfobglyuqpdtwvkn。
根据实验,当我从已经存在的应用程序中执行SaveAs时,它只是替换该字母的信息,并将其移动到MRUList的前面。
如果应用程序不在那里,并且不是所有的字母都在MRUList中,它将获取第一个可用字母,将信息放入该字母中,然后将该字母放在MRUList的前面。
如果应用程序不在那里,并且所有的字母都被使用了,它将抓取MRUList上的最后一个字母,将信息放入该字母中,然后将其移动到MRUList的前面。
我注意到,为一个全新的应用程序执行SaveAs并没有给我z字母,它重用了‘`MRUList’中的最后一个字母。
键本身看起来就像UCS-2 (在我的澳大利亚版本的Windows中,16位Unicode,ASCII,零散的空字节,您的里程可能因国际变体而异),它们包含以null结尾的可执行文件名称,然后是以null结尾的目录。
关于您关于无法访问该应用程序源代码的评论,这无关紧要。并不是应用程序在更改这些密钥。ComDlg32是Windows本身的常用对话框(打开、另存为、打印设置等)。
如果要为给定的应用程序设置MRU,请执行以下步骤。
1/在字母键中搜索该应用程序。如果您找到它,请转到步骤3。
2/获取MRUList之外的下一个可用字母。如果MRUList已经包含了从a到y的所有字母,或者您不确定y永远是最后一个(它可能在注册表中的其他位置可配置),那么获取MRUList末尾的最后一个字母。
3/现在你有你的信了。使用您的应用程序和目录的UCS-2数据更改或创建该字母键(均以null结尾)。
4/更改MRUList以将您的字母放在前面。
那里。这应该就行了。
发布于 2009-05-06 01:16:59
除非我误解了您的情况,否则标准的Windows OpenFileDialog应该有一个名为InitialDirectory的属性,它指定对话框应该打开到的目录。
发布于 2009-05-15 20:01:44
其他的是重要的吗?我会考虑放弃其他的,或者重新使用第一个或最后一个。(我也会尝试使用任何字符,但幸运的是它可能会起作用。)
https://stackoverflow.com/questions/827612
复制相似问题