用于切换“显示隐藏文件、文件夹和驱动器”的 API
Posted
技术标签:
【中文标题】用于切换“显示隐藏文件、文件夹和驱动器”的 API【英文标题】:API to toggle "Show hidden files, folders and drives" 【发布时间】:2011-01-31 15:41:15 【问题描述】:Windows API 中是否有一个功能可以在 Windows 资源管理器中切换“显示隐藏的文件、文件夹和驱动器”选项(工具 >> 文件夹选项... >> 查看选项卡)。
我知道一个相关的注册表项,但更改它不会立即生效。关键是:HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Explorer/Advanced/Hidden
尝试从 C# 中执行此操作,但问题不是特定于语言的。
【问题讨论】:
不知道您为什么要这样做,我可以问一下 - 您确定这是解决您遇到的任何问题的正确方法吗? blogs.msdn.com/oldnewthing/archive/2008/12/11/9193695.aspx 我正在制作一个实用程序来显示/隐藏文件组的隐藏属性。因此,如果隐藏文件在资源管理器中可见,我想弹出一个警告,并让用户单击修复它。 @Damien 感谢您的链接,我也阅读了 Raymond 的博客 :) 不使用全局操作系统状态来解决本地问题是常识,因此发出警告是适当的。 啊,这似乎是合理的。我会留下评论/回答作为对其他人的警告 【参考方案1】:您可以尝试this thread中的OP建议的选项,即:
要么
SendNotifyMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0);
或
RefreshPolicyEx(False, RP_FORCE);
或
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, integer(pchar('Policy')), SMTO_NORMAL or SMTO_ABORTIFHUNG, 5000, c1);
这些不在 .NET C# API 中,因此您必须使用 DllImport
编辑:格式化
【讨论】:
链接已损坏。【参考方案2】:除了我在原始问题中添加的评论之外 - 如果您这样做是为了,例如,您即将弹出的 OpenFileDialog 显示这些文件 - 不要这样做。
在这种情况下,您最好 P/Invoking GetOpenFileName,并在 OpenFileName 结构的标志中设置适当的选项(OFN_FORCESHOWHIDDEN(相关主题请参见 enum)。
这样你只会在适当的时候影响你的应用程序
【讨论】:
【参考方案3】:我知道没有 API,但注册表项是 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Hidden
。从实验来看,似乎值为 1 表示显示,值为 2 表示隐藏。
【讨论】:
感谢您的反对,但如果您花时间检查,您会发现 OP 的问题在我回答几天后被修改为包含注册表项。【参考方案4】:SHGetSetSettings
SHELLSTATE Structure fShowAllObjects 布尔值 TRUE 以显示所有对象,包括隐藏文件和文件夹。 FALSE 隐藏隐藏文件和文件夹。
fShowSysFiles 布尔值 TRUE 显示系统文件,FALSE 隐藏它们。
Spy++ 说 WM_SETTINGCHANGE 被发送到资源管理器窗口。
【讨论】:
它可以更改设置。不幸的是,在 Windows 7 资源管理器中没有得到更新(WM_SETTINGCHANGE 没有帮助)。以上是关于用于切换“显示隐藏文件、文件夹和驱动器”的 API的主要内容,如果未能解决你的问题,请参考以下文章
怎么最快速地切换项目开发环境,省去查看修改API文档的步骤?