c++ API 设置桌面图标 自动排列图标 网格对齐 snaptogrid

方式一

通过调研宏ListView_SetExtendedListViewStyleEx,来实现控制自动排列图标&网格对齐的开关

// 网格对齐
int SnapToGrid(int bAlign)
{int errorNum = 0;HWND hwndParent = ::FindWindow(Progman, ProgramManager);if (nullptr == hwndParent){errorNum = 2;return errorNum;}HWND hwndSHELLDLL_DefView = ::FindWindowEx(hwndParent, NULL, ShellView, NULL);if (nullptr == hwndSHELLDLL_DefView){errorNum = 3;return errorNum;}HWND hDestTop = ::FindWindowEx(hwndSHELLDLL_DefView, NULL, SysListView32, FolderView);if (nullptr == hDestTop){errorNum = 4;return errorNum;}DWORD dwExStyle = (DWORD)ListView_GetExtendedListViewStyle(hDestTop);// 网格对齐if (bAlign){if ((dwExStyle & LVS_EX_SNAPTOGRID) == 0){ListView_SetExtendedListViewStyleEx(hDestTop, LVS_EX_SNAPTOGRID, LVS_EX_SNAPTOGRID);ListView_Arrange(hDestTop, LVA_SNAPTOGRID);errorNum = 6;}}else{//取消桌面图标对齐到网格;if ((dwExStyle & LVS_EX_SNAPTOGRID) == LVS_EX_SNAPTOGRID){ListView_SetExtendedListViewStyle(hDestTop, dwExStyle & ~LVS_EX_SNAPTOGRID);errorNum = 8;}}return errorNum;
}

这种方式,确实能实现控制自动排列图标&网格对齐的打开和关闭,但是当你在桌面右键鼠标->查看
发现这里“钩钩”依然还在。其实只是这里没有刷新而已,桌面已经关闭了自动排列图标和网格对齐。

方式二

通过调用COM组件里面的IFolderView2->SetCurrentFolderFlags函数来实现。这种方式能有效避免方式一“桌面右键鼠标->查看 发现这里“钩钩”依然还在”这个缺陷。
代码如下:

class CCoInitialize {public:CCoInitialize() : m_hr(CoInitialize(NULL)) { }~CCoInitialize() { if (SUCCEEDED(m_hr)) CoUninitialize(); }operator HRESULT() const { return m_hr; }HRESULT m_hr;
};// 查找桌面文件视图
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);}// 关闭自动排列&网格对齐
void snapgrid(int bAlign)
{CComPtr<IFolderView2> spView;FindDesktopFolderView(IID_PPV_ARGS(&spView));if (NULL == spView){return;}DWORD flags = 0;if (bAlign){spView->GetCurrentFolderFlags(&flags);spView->SetCurrentFolderFlags(FWF_SNAPTOGRID, flags^FWF_SNAPTOGRID);}else{spView->GetCurrentFolderFlags(&flags);spView->SetCurrentFolderFlags(FWF_AUTOARRANGE, ~FWF_AUTOARRANGE);spView->GetCurrentFolderFlags(&flags);spView->SetCurrentFolderFlags(FWF_SNAPTOGRID, ~FWF_SNAPTOGRID);}}
// 网格对齐
int SnapToGridEx(int bAlign)
{int errorNum = 0;CCoInitialize initCom;snapgrid(bAlign);return errorNum;
}

推荐使用方式二,这种方式能在完成功能的同时刷新桌面菜单显示,有效治疗强迫症。
如果你喜欢本文,欢迎收藏转载,转载请注明出处。

c++ API 设置桌面图标 自动排列图标 网格对齐 snaptogrid相关推荐

  1. Win10桌面取消自动排列,刷新仍然有图标移动——适用于桌面排列患者

    Win10桌面取消自动排列,刷新仍然有图标移动--适用于桌面排列患者 问题:刷新之后一直有图标移动,一开始按照网上的操作,取消自动排列,还是一样: 症结:最后发现每次移动只有一个图标,是自己创建的控制 ...

  2. 苹果电脑表格取消自动计算机,mac苹果电脑怎么设置文件图标自动排列 mac苹果电脑怎么取消文件图标自动排列...

    类型:Mac图形图像大小:23.3M语言:中文 评分:10.0 标签: 立即下载 mac苹果电脑怎么设置文件图标自动排列?mac苹果电脑怎么取消文件图标自动排列?有的小伙伴想知道mac苹果电脑怎么设置 ...

  3. 计算机无法自动排列,为什么我的电脑不能自动排列图标

    介绍几种方法 电脑|属性|高级|性能项的 设置|自定义|在桌面上为图标标签使用阴影|打上勾| 如果不行,再在桌面空白处右击|排列图标|在桌面上锁定web项目|把勾去掉 可以尝试以下4种方法: 1. 右 ...

  4. MAC文件图标自动排列+取消自动排列

    一.设置文件图标自动排列 访达进入文件夹-->上方操作图标 -->选择排列方式按 -->选择 control+command+1键 按名称排列 control+command+2键 ...

  5. Windows7中随意排列图标(自动排列,对齐到网络)

    Windows7中随意排列图标(自动排列,对齐到网络)   [-HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft ...

  6. Ubuntu20 设置桌面壁纸自动切换

    最近电脑系统换成了ubuntu,想把桌面壁纸设置撑自动切换,搜了一下发现都是要修改cml文件的.最后终于找到一个不用修改的方法: 1.首先创建一个文件夹,里面存放下载的所有壁纸 2.打开shotwel ...

  7. 计算机桌面图标的排列,win7电脑桌面图标排列方式如何设置,电脑桌面图标排列方式设置方法...

    最近有位win7系统用户反映,自己桌面上的程序图标非常多,看着很乱,所以想要将它们排列整齐一些,但是却不知道怎么操作,那么win7电脑桌面图标排列方式怎么设置呢?今天为大家分享win7电脑桌面图标排列 ...

  8. win10桌面排序计算机,Win10系统怎么对电脑桌面上的图标进行排列(自动排列和手动排列)...

    导语:通常我们在对桌面图标进行排序之后,各个图标的位置就会固定下来,电脑关机和开机都不会使其发生变化.但是有些Win10电脑用户却会遇到,原本排列的好好的桌面图标,却无故变得乱七八糟.下面白豆芽就和大 ...

  9. 计算机桌面图标的排列,如何进行桌面图标排列 让你的桌面一秒变酷炫【图文教程】...

    现在科技越来越智能化,为了方便生活中的很多事情,出现了各式各类的软件,因此 电脑桌 面上往往排满了图标,有时候看着很多又眼花缭乱.有时候找软件要找很久才找得到,真是麻烦又心累,为了还眼睛一片清明和桌面 ...

最新文章

  1. 浏览器内核Trident/Gecko/WebKit/Presto
  2. 几个常见规则引擎的简单介绍和演示
  3. .jQuery文档分析4-文档处理
  4. Zynq的AMP开发流程说明(基于OCM)
  5. 中国机器人减速机行业十四五发展规划及未来需求预测报告2021-2027年
  6. scala入门示例helloworld及idea中集成Scala库
  7. 应用负载均衡之LVS(三):ipvsadm命令
  8. mysql导出二进制日志_使用mysqlbinlog提取二进制日志
  9. Linux的capability深入分析(2)
  10. pp2使用需要java_新GRE模考软件POWERPREP2安装和使用说明(图解)
  11. ANDROID开机动画分析
  12. css背景颜色渐变 从左到右 从下到上
  13. php pdo函数说明,PHP PDO函数库详解,pdo函数库详解
  14. Python Re正则表达式
  15. ios没有StringBuilder,哥心如刀绞,泪如尿崩
  16. 产品结构设计的主要内容有哪些?
  17. 作为婚纱摄影企业,是否有必要开发小程序?
  18. UDP攻击是什么意思?UDP攻击防范措施
  19. Python案例1—人民币与美元的汇率兑换V_2.0
  20. 巴法络的ts系列服务器,巴法络TS5400D

热门文章

  1. 实验1 软件质量保证标准的分类
  2. MySQL触发器基本实操
  3. 2014年的那些碎碎念。
  4. 机器视觉_HALCON_HDevelop用户指南_7.图像采集助手
  5. 怎么部署个人云服务器?保姆级教程
  6. 编程语言的历史和发展
  7. pdf2docx库 | 转文件格式,支持抽取文件中的表格数据
  8. java子类调用父类的方法
  9. Unresolved reference: BR
  10. CAMWrok切换成中文语言