• 全部
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

如何程序清除最近打开的文档 (Recent Items)

strip 2008-03-26 07:01:33
Header: shlobj.h
Import library: shell32.lib
----------------------------
SHAddToRecentDocs(SHARD_PIDL, NULL);
或者
SHAddToRecentDocs(SHARD_PATH, NULL);
----------------------------

在Windows XP上都可以清除最近打开的文档列表,但是在Windows 2008上却不可以,有没有谁帮我试一下Vista下是否能工作?


...全文
1998 点赞 收藏 16
写回复
16 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
strip 2008-03-28
准备来结贴了, 总结一下供大家参考:

最后的结果不好意思说,不知道算微软愚蠢还是我愚蠢

1. 发现manifest都是有而且很正常,就是不行, 改成requireAdministrator也不行
2. vs2008向导做的程序,console application不行, win32, mfc application都可以!!!
3. win32 application在ShowWindow()之后调用才可以。。。。。。。。。。。。。。。。。。。


SHAddToRecentDocs() <---------- 不工作
ShowWindow(hWnd, SW_SHOW); <---- 还不能用ShowWindow(0,SW_HIDE)/ShowWindow(hWnd, SW_HIDE)代替
SHAddToRecentDocs() <---------- 工作
//这不是迷信吗。。。 SHAddToRecentDocs和ShowWindow有啥关系


4. 认真看ShowWindow(0,0)和ShowWindow(hWnd, SW_SHOW)在output窗口的区别

'ClearRecentWin32.exe': Loaded 'C:\Windows\System32\ole32.dll' <---- 多一行这个

5. 然后就开始自责了,莫非所有shell函数都需要initialize?
工作!!!

main()
{
OleInitialize(0); // CoInitializeEx( 0, apartment )
SHAddToRecentDocs(SHARD_PIDL, NULL);
OleUninitialize();
}

6. 换回Windows XP的机器, 即便console application, 如下这么简单还是work!!!

main()
{
SHAddToRecentDocs(SHARD_PIDL, NULL);
}


7. 不知是不是因为一个Windows 2008一个Windows XP (两台电脑都没有装过VS2008之前的版本),还是两个电脑具体的环境已经不同。。。

回复
long_xing 2008-03-27
如果搂主测试成功了,我要全分,呵呵!
回复
long_xing 2008-03-27
在你的程序中加入manifest文件,这样你的程序图标上面会新增一个小盾牌的标识。
运行的时候会出现提示信息。这个时候你再使用程序去清除最近打开的文档就能够成功了。
因为VISTA对老版的可执行程序在敏感目录操作文件时会采用一种虚拟的机制。你函数显示成功,但对应目录下的文件并没有更改。
回复
闪破风浪 2008-03-27
帮up一下,没有试过..
回复
ilzyfefefe 2008-03-27
up
回复
iyranly 2008-03-27
帮up一下,没有试过..
回复
luoluo2001108 2008-03-27
回复
strip 2008-03-27
顶一下

谢楼上二位
回复
strip 2008-03-27
我觉得10楼应该说对了

因为我用vs创建一个新的mfc的程序,调用api是奏效的,至少证明这个api在win2008还是work的
但是我打开有问题的project,发现里面有manifest。。。

接下来看看里面的manifest是不是写错了,等研究回来汇报
回复
Mr-Chen 2008-03-27
2008还没用过,哪里有下的?
回复
hua2136 2008-03-27
学习
回复
熊猫贩子 2008-03-27
装个虚拟机测试一下
回复
zhucde 2008-03-26
如果是自己的程序,可以考虑在打开时,不往注册表中写入打开文件的信息.
在InitInstance中,取消掉:
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
或其它自己指定的值
回复
jameshooo 2008-03-26
没试过,顶一下。
虽然我有vista,不过我从来不喜欢最近打开的文档,所以早早就设置好不要保存最近打开的文档。
回复
strip 2008-03-26
顶一下
难道只能自己装个Vista。。。

有人有windows 2008也帮忙试下
回复
jhs1982419 2008-03-26
这个还确实没做过,帮LZ顶下。
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2008-03-26 07:01
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……