如何以编程方式检查是否使用C#启用或禁用Windows桌面设置“自动排列图标”?
我已经看过安排桌面图标的示例,但实际上我想检查设置是启用还是禁用。
从我在相关问题中看到的,有一个注册表设置和一个组策略设置,但我原本以为会有一个更安全的方法来确定使用Win32调用这是一个Win32调用我正在寻找因为但我不确定我需要做什么电话。
当我在C#中编写应用程序时,我更喜欢它,如果C#代码示例可以证明获得此值。
最好是我希望从Windows Vista到Windows 10及更高版本的功能。
答案 0 :(得分:1)
您可以通过编程方式查询桌面以查找各种标记,包括"自动排列&#34 ;;这比使用注册表更安全,因为它已被记录和支持。
这可以使用IShellView::GetCurrentInfo()
方法完成。此函数填充FOLDERSETTINGS
结构。要查看是否已启用自动排列,请检查FWF_AUTOARRANGE
成员中fFlags
标志的状态(可以找到完整的标记列表here)。
以下是获取桌面IShellView
界面的C ++代码(取自Raymond Chen's blog)。您可以很容易地将其转换为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);
}