c++ 移动桌面图标

之前分享过一篇关于移动桌面图标的文章。那种通过SendMessage函数来改变图标位置的方式,有一些缺陷(比如不能通知iconcache.db 及时刷新等)。后面有继续寻找其他改变桌面图标位置的API。并且能及时通知iconcache.db及时刷新桌面图标信息。
好了,话不多说,直接上代码:

// 处理COM组件类,方便COM组件的初始化以及释放资源
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);}// 移动指定图标位置
// iconname : icon图标名称
// x: 图标x轴值
// y: 图标y轴值
int modifyIconPos(char* iconnameparame, int x, int y)
{int errorNum = 10;std::wstring temName = U8ToUnicode(iconnameparame); CComPtr<IFolderView> spView;FindDesktopFolderView(IID_PPV_ARGS(&spView));if (NULL == spView){return errorNum;}CComPtr<IEnumIDList> spEnum;spView->Items(SVGIO_ALLVIEW, IID_PPV_ARGS(&spEnum));CComPtr<IShellFolder> spFolder;spView->GetFolder(IID_PPV_ARGS(&spFolder));for (CComHeapPtr<ITEMID_CHILD> spidl; spEnum->Next(1, &spidl, nullptr) == S_OK; spidl.Free()){STRRET str;spFolder->GetDisplayNameOf(spidl, SHGDN_NORMAL, &str);CComHeapPtr<wchar_t> spszName;StrRetToStr(&str, spidl, &spszName);if (std::wstring(spszName) == temName){PCITEMID_CHILD apidl[1] = { spidl };POINT pt;pt.x = x;pt.y = y;// 这里就是设置桌面图标的关键代码spView->SelectAndPositionItems(1, apidl, &pt, SVSI_POSITIONITEM);SHChangeNotify(SHCNE_UPDATEITEM, SHCNF_IDLIST, spidl, NULL);errorNum = 20;return errorNum;}errorNum++;}return errorNum;
}// 移动指定图标位置
// iconname : icon图标名称
// x: 图标x轴值
// y: 图标y轴值
int MoveIconPosEx(char* iconnameparame, int x, int y)
{int errorNum = 0;CCoInitialize initCom;errorNum = modifyIconPos(iconnameparame, x, y);return errorNum;}

以上代码,亲测有效,欢迎转载,转载请注明出处。

c++ 移动桌面图标相关推荐

  1. w ndows7启动后没有图标,Windows7下双击桌面图标无法打开怎么解决?

    为了操作方便,用户会在Win7桌面上创建程序图标,只要双击桌面图标就能快速打开程序,可近日有用户双击桌面图标无法打开,这是怎么回事?来看下小编是怎么解决的吧. 解决方法一: 1.首先双击打开win7桌 ...

  2. 桌面图标不透明的小问题处理

    "我的电脑"--"属性"--"高级"--"设置",将下框"在桌面上为图标标签使用阴影"打勾. 在&q ...

  3. safari快捷图标不见了_Win7桌面图标不见了怎么办?附解决办法

    Win7系统桌面图标不见了只有名字怎么办?近期一个用Win7系统的用户发那样,桌面的图标都消失了,但是还能看到图标名,该如何解决呢?下面请看具体解决方法. 解决办法: 1.首先,咱们同时按下win7电 ...

  4. Windows Server 2008 定义用户桌面图标

    1.1.1 设置用户的桌面环境 将常用桌面图标,显示在桌面. 步骤: 1. 右击桌面,点击"个性化".现在桌面上没有"计算机"."回收站". ...

  5. 打开 计算机 找不到桌面图标,电脑启动后桌面图标不见了怎么办 不显示图标解决办法...

    在我们的生活和工作中,电脑已经成为我们密切相关的工具之一了.但是偶尔有时候也会遇到电脑出现蓝屏.开不了机.桌面不显示图标等故障.那么电脑启动后不显示图标怎么办呢?最近有用户反映,电脑开机后进入桌面却不 ...

  6. 点击鼠标左键 自动锁定计算机图标,鼠标一按左键桌面图标就消失了怎么办_为什么按鼠标左键时桌面图标都不见了...

    最近有不少用户反馈说碰到这样一个奇怪的现象,就是鼠标只要在桌面一按左键,左面上的图标就会消失了,而且点击鼠标也没有什么用,那么为什么按鼠标左键时桌面图标都不见了呢?原因有很多,可能是系统故障或者中毒等 ...

  7. 计算机的桌面图标都没有了怎么办,电脑桌面图标都没了怎么办 怎么恢复

    小编今天刚刚打开电脑的时候,出现了一个问题,电脑桌面上所有的图标都不见了,快捷方式图标和图片缩略图,文件夹等都无法显示,电脑桌面图标都没了怎么办?这其实是个小问题,那电脑桌面图标都没了怎么恢复呢,小编 ...

  8. 戴尔怎样把计算机放在桌面,戴尔台式机桌面图标不见了怎么办

    有时候打开戴尔台式机桌面,我们的桌面图标不见了,要怎么样找回呢?下面由小编给你做出详细的戴尔台式机桌面图标不见了解决方法介绍!希望对你有帮助! 戴尔台式机桌面图标不见了解决方法一: windows7系 ...

  9. qt的exe启动时隐藏图标_系统小技巧:Win10桌面图标问题多 常见3种这么解

    桌面图标是我们使用Windows 10接触最频繁的项目.在使用桌面图标的过程中,也可能会遇到一些不如意.例如,为获取清洁桌面而要隐藏桌面图标时,却发现图标无法隐藏:点击桌面图标想启动某个应用,却发现软 ...

  10. win10桌面计算机打不开,win10系统桌面图标打不开的解决技巧

    win10系统使用久了,好多网友反馈说win10系统桌面图标打不开的问题,非常不方便.有什么办法可以永久解决win10系统桌面图标打不开的问题,面对win10系统桌面图标打不开的图文步骤非常简单,只需 ...

最新文章

  1. 你的肠道菌群是遗传自你父母,还是后天环境塑造的?
  2. VMware安装RedHat 6(64位)报错问题
  3. centos mysql卸载重装_提高性能,MySQL 读写分离环境搭建
  4. Unity光照与渲染设置学习笔记
  5. 容器持久化存储训练营”启动倒计时!3天攻破K8s难点
  6. bash特性以及shell脚本简介
  7. 十二、Promise的学习笔记(Promise的基本使用、链式编程、all())
  8. 【Python基础知识-pycharm版】第四节-元组
  9. 深入分析 Flutter 渲染性能
  10. c++和c语言的区别_C与C++傻傻分不清楚,有啥区别,咋用,杂学?
  11. Java学习笔记(基本数据类型和变量命名规则)
  12. FPGA转正总结(标准版)
  13. 【车牌识别】基于matlab车辆出入库计时系统【含Matlab源码 469期】
  14. 浅谈Unity中的优化
  15. maven的pom详解
  16. STM32开发项目:ADS1115的驱动与使用
  17. 注意力机制-多头注意力
  18. 移植QT5.6到韦东山JZ2240嵌入式开发板(史上最最最最最详细的QT移植教程)
  19. ubuntu 坚果云无法切换用户[closed]
  20. docker命令,一些常用的docker命令

热门文章

  1. SQL Server 定时自动备份和自动删除方法图文超详细步骤
  2. WPS表格如何隔行填充颜色
  3. Plotly.js使用详细介绍(折线图、饼状图、点图、水平条形图、桑基图、树状图、等值线图)
  4. macbook系统占用硬盘大_解决macos双系统情况下重制macos系统导致windows系统盘一直占用的情况...
  5. python万年历实验报告_Python编程——万年历
  6. java模拟微信抢红包金额算法规则二倍均值法模拟(满满的注释)
  7. android M权限问题
  8. vue里 a(){} 和a:()=>{}的区别
  9. 软件测试---性能测试
  10. 服务器2012不能复制文件夹,windows2012标准版 目录SYSVOL和Netlogon共享和文件同步问题 - 服务器论坛 - 51CTO技术论坛_中国领先的IT技术社区...