用于切换“显示隐藏文件、文件夹和驱动器”的 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 在切换路由器链接时丢失数据

怎么最快速地切换项目开发环境,省去查看修改API文档的步骤?

selenium 常用API

关于使用 HTTP 请求头在网站 (HTML) 和 api (JSON) 之间切换的意见

反应 SPA。用于处理登录状态的全局状态存储 API?

是否有用于更改区域设置(特别是 IME)的 WinXP/WinXP 嵌入式 API?