执行过“ 打开/保存 ”操作后,发现注册表里最新被访问的文件目录被更改,如何禁止CFileDialog修改注册表最新访问的目录?谢谢了!!!!!!被修改的注册表:
Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedMRU\“最新访问文件的目录”

解决方案 »

  1.   

    注册表中的“最新访问文件的目录”是被CFileDialog修改过的。
      

  2.   

    http://blog.programfan.com/article.asp?id=5692
    VC++的MFC对最近文件进行了包装,它使用户无需编写任何代码就可实现最近文件菜单。但这种方法也有缺陷:
      ①用户程序必须使用文档、视图结构,只能利用它提供的文档打开和保存文件,如果你使用自己编写的函数打开和保存文件,绕过了它的文档,则最近文件将无法使用。
      ②这种最近文件保存在注册表中,不易清除,容易形成注册表中垃圾,也没有提供用户清除最近文件的权利,不利于用户隐私的保护。
      用ini文件实现最近文件可以解决上述问题,而且用编程控制MRU更灵活,可以提供更多功能。
      

  3.   

    xyxfly(小虾米 (本命年Happy, Day Day Up!)) :谢谢!
    但我不想修改打开菜单下的最近文件,而是禁止CFileDialog的“打开/保存”操作
    修改注册表中的“最新访问文件的目录”。Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedMRU\
    “最新访问文件的目录”。
      

  4.   

    禁止,估计比较难,重载CFileDialog的方法不知道行不,不过你要先了解CFileDialog mru原理
    你也可以在程序运行前先把Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedMRU\保存出来,完了之后再恢复:)
      

  5.   

    调用CFileDialog里的DoModal(),执行函数GetOpenFileName(&m_ofn)或GetSaveFileName(&m_ofn)后,注册表里的最后访问目录就变了,所以是在GetOpenFileName或GetSaveFileName里改的注册表。所以派生CFileDialog不能使用GetOpenFileName,要重写对话框了。若象你说的那样改注册表,此注册表Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedMRU\“”只在2000和XP系统里有,对其它系统不适用了吧?