如何程序清除最近打开的文档 (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下是否能工作?


...全文
2174 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
学习
homesos 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顶下。

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧