如何以编程方式检查是否使用 C# 启用或禁用了 Windows 桌面设置“自动排列图标”

本文关键字:设置 桌面 Windows 图标 排列 方式 编程 检查 是否 启用 | 更新日期: 2023-09-27 18:37:23

如何以编程方式检查是否使用 C# 启用或禁用了 Windows 桌面设置"自动排列图标"?

我已经看到了排列桌面图标的示例,但我实际上想检查该设置是启用还是禁用。

从我在相关问题中读到的内容来看,有一个注册表设置和一个组策略设置,但我认为会有一种更安全的方法使用 Win32 调用来确定这一点,这是我正在寻找的 Win32 调用,但我不确定我需要进行什么调用。

当我用 C# 编写应用程序时,如果 C# 代码示例可以演示如何获取此值,我希望它。

最好我想要从Windows Vista到Windows 10及更高版本的东西。

如何以编程方式检查是否使用 C# 启用或禁用了 Windows 桌面设置“自动排列图标”

您可以通过编程方式在桌面上查询各种标志,包括"自动排列"; 这比使用注册表更安全,因为它已记录和支持。

这可以使用IShellView::GetCurrentInfo()方法完成。此函数填充FOLDERSETTINGS结构。要查看自动排列是否打开,请检查fFlags成员中FWF_AUTOARRANGE标志的状态(可在此处找到标志的完整列表)。

下面是获取桌面IShellView界面的C++代码(摘自Raymond Chen的博客)。您可能可以很容易地将其转换为 C#。

void FindDesktopFolderView(REFIID riid, void **ppv)
{
 CComPtr<IShellWindows> spShellWindows;
 spShellWindows.CoCreateInstance(CLSID_ShellWindows);
 CComVariant vtLoc(CSIDL_DESKTOP);
 CComVariant vtEmpty;
 long lhwnd;
 CComPtr<IDispatch> spdisp;
 spShellWindows->FindWindowSW(
     &vtLoc, &vtEmpty,
     SWC_DESKTOP, &lhwnd, SWFO_NEEDDISPATCH, &spdisp);
 CComPtr<IShellBrowser> spBrowser;
 CComQIPtr<IServiceProvider>(spdisp)->
     QueryService(SID_STopLevelBrowser,
                  IID_PPV_ARGS(&spBrowser));
 CComPtr<IShellView> spView;
 spBrowser->QueryActiveShellView(&spView);
 spView->QueryInterface(riid, ppv);
}