改变桌面图标位置,需要准确计算网格位置。影响网格位置的因数很多,比如注册表的HKEY_CURRENT_USER\ControlPanel\Desktop\WindowMetrics目录下的,IconSpacing,IconVerticalSpacing。还有图标本身大小(大中小图标),title行数,title字体,网格间距(默认8px)等等。而且,目前还没有找到这些因数与网格位置之间的计算公式(惭愧)。后来,经同事协助,找到了一个系统API可以直接获取网格长宽(可以计算网格位置),真是太高兴了。这里分享出来,提供给有需要的童鞋。

// 查找桌面文件视图
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);}class CCoInitialize {public:CCoInitialize() : m_hr(CoInitialize(NULL)) { }~CCoInitialize() { if (SUCCEEDED(m_hr)) CoUninitialize(); }operator HRESULT() const { return m_hr; }HRESULT m_hr;
};// 获取系统桌面图标信息
/* 返回值格式如下:工作区域X轴(水平),工作区域Y轴(垂直),图标水平间距,图标垂直间距,自动排序标志,显示模式*/
const char* GetSystemIconInfo(int bShow)
{HRESULT m_hr = CoInitialize(NULL);if (m_hr != S_OK){return "";}CComPtr<IFolderView> spView;FindDesktopFolderView(IID_PPV_ARGS(&spView));if (NULL == spView){return "";}int index = 1;CComHeapPtr<ITEMID_CHILD> spidl;POINT Spacing_PT;POINT DefaultSpacing_PT;spView->GetSpacing(&Spacing_PT);spView->GetDefaultSpacing(&DefaultSpacing_PT);bool bAutoArrange = spView->GetAutoArrange() == S_OK;// 显示模式UINT uViewMode = 0;spView->GetCurrentViewMode(&uViewMode);// 桌面工作区域int workAreaX = GetSystemMetrics(SM_CXFULLSCREEN); //获取最大化窗体的显示区域宽度int workAreaY = GetSystemMetrics(SM_CYFULLSCREEN); //获取最大化窗体的显示区域高度char* temBuff = new char[MAX_PATH];memset(temBuff, '\0', sizeof(char)*MAX_PATH);sprintf(temBuff, "workareaX=%d,workareaY=%d,spaceX=%d,spaceY=%d,autoArrange=%d,viewMode=%d", workAreaX, workAreaY, Spacing_PT.x, Spacing_PT.y, int(bAutoArrange), uViewMode);//CoUninitialize();return temBuff;
}

获取windows 桌面网格大小 API相关推荐

  1. python安装到桌面的路径是什么_Python 获取windows桌面路径的5种方法小结

    这里介绍了5中python获取window桌面路径的方法,获取这个路径有什么用呢?一般是将程序生成的文档输出到桌面便于查看编辑. 前两个方法是通过注册表来获取当前windows桌面绝对路径,比较推荐使 ...

  2. Python 获取windows桌面路径的5种方法小结

    今天小编就为大家分享一篇Python 获取windows桌面路径的5种方法小结,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 这里介绍了5中python获取window桌面路径的方法 ...

  3. MFC之系统任务栏 获取Windows桌面底部任务栏自动隐藏任务栏\取消自动隐藏任务栏 的消息

    由于需求,我需要获取Windows底部任务栏 自动隐藏任务栏或者取消自动隐藏任务栏时的消息. 可在当时我就在想想要在自己程序中获取系统的消息那肯定很麻烦,于是我就上网查了一遍不过这方面的介绍也似乎不是 ...

  4. C++获取windows桌面的路径

    WINSHELLAPI HRESULT WINAPI SHGetSpecialFolderLocation (HWND hwndOwner, int nFolder,LPITEMIDLIST * pp ...

  5. 利用bat获取windows桌面壁纸

    新建bat文件,贴入以下代码即可 echo off set tmp=%~dp0\tmp set res=%localappdata%\Packages\Microsoft.Windows.Conten ...

  6. C#如何设置Windows桌面分辨率

    在开发的过程中,有时候我们需要获取Windows桌面的分辨率.这时候.NET为我们提供了相关的类Screen,通过使用Screen类,我们可以获取桌面的相关信息.以下是实例代码: Screen scr ...

  7. 获取Windows当前桌面/锁屏(非Windows聚焦)壁纸

    调查发现网上所有类似教程都是针对Windows聚焦的,本文独家提供对于非Windows聚焦的桌面/锁屏壁纸获取方法! 桌面 桌面壁纸位于:%APPDATA%\Microsoft\Windows\The ...

  8. 获取Windows远程桌面端口

    获取Windows远程桌面端口 Windows的默认远程桌面使用的端口是3389,如果管理员更改了默认端口,此时想获取默认端口就需要查询注册表. 我最近在3A服务器购买了云服务器. 远程桌面端口所在的 ...

  9. python软件怎么用-如何使用Python自动控制windows桌面

    前言 在使用PC时与PC交互的主要途径是看屏幕显示.听声音,点击鼠标和敲键盘等等.在自动化办公的趋势下,繁琐的工作可以让程序自动完成.比如自动化测试.自动下单交易等.很多软件除了可以GUI方式操作外还 ...

最新文章

  1. python源代码不需要编译成什么-python需要编译么
  2. 我的 2021 之感谢有你们(上篇)
  3. CodeForces-589B(思维/排序)
  4. kafka describe topic
  5. xstat博客主题php,WordPress博客主题:Diaspora 简约文艺范主题
  6. iOS 7 改变Status Bar 颜色
  7. 怎样利用超图客户端打点_QuickFix Java 讲解(三)客户端的搭建与解析
  8. linux下创建只读账号,Linux只读账号配置
  9. 95-190-444-源码-window-Trigger-EventTimeTrigger
  10. 让美团、京东、搜狐都说好的数据仓库,牛在哪?
  11. linux知识点查阅
  12. 8VC Venture Cup 2016 - Final Round (Div. 2 Edition)
  13. 决策树算法小结(三) CART原理及代码实现
  14. LCS2005标准版部署
  15. log4j自定义配置文件路径
  16. 高中生计算机会考word题,高中信息技术会考操作题解析
  17. 基于xterm.js + socket.js的Web SSH
  18. PS Tray Factory win7 系统托盘 软件用法
  19. 术语解释(PV、UV、QPS、TPS)
  20. onedrive手机客户端_OneDrive手机版

热门文章

  1. 【数据结构】自动机全家桶(AC、回文、后缀自动机)
  2. 线上教育服务的最优选是小程序化?
  3. R语言U统计量检验样本对称性
  4. 为什么深度学习要使用GPU?
  5. 原来这些名言都有后半句!被坑了太多年!
  6. SWIG学习记录(一)SWIG基础
  7. (附源码)springboot幼儿园幼儿基本信息管理系统设计与实现 毕业设计201126
  8. 移除链表元素 C语言
  9. minix3_Ubuntu- VMware- MINIX 3
  10. 高斯消元法python编程_Python 实现顺序高斯消元法示例