如何以编程方式检查是否使用 C# 启用或禁用了 Windows 桌面设置“自动排列图标”
本文关键字:设置 桌面 Windows 图标 排列 方式 编程 检查 是否 启用 | 更新日期: 2023-09-27 18:37:23
如何以编程方式检查是否使用 C# 启用或禁用了 Windows 桌面设置"自动排列图标"?
我已经看到了排列桌面图标的示例,但我实际上想检查该设置是启用还是禁用。
从我在相关问题中读到的内容来看,有一个注册表设置和一个组策略设置,但我认为会有一种更安全的方法使用 Win32 调用来确定这一点,这是我正在寻找的 Win32 调用,但我不确定我需要进行什么调用。
当我用 C# 编写应用程序时,如果 C# 代码示例可以演示如何获取此值,我希望它。
最好我想要从Windows Vista到Windows 10及更高版本的东西。
您可以通过编程方式在桌面上查询各种标志,包括"自动排列"; 这比使用注册表更安全,因为它已记录和支持。
这可以使用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);
}