在windows XP时代,我们获取桌面图标窗口的句柄往往用一下语句:

HWND hwndParent = ::FindWindow( "Progman", "Program Manager" );
HWND hwndSHELLDLL_DefView = ::FindWindowEx( hwndParent, NULL, "SHELLDLL_DefView", NULL );
HWND hwndSysListView32 = ::FindWindowEx( hwndSHELLDLL_DefView, NULL, "SysListView32", "FolderView" );

可是在windows 7时代,上述代码失效了,经过SKY++分析,发现类名为"Progman"的窗口根本就没有子窗口,而桌面图标窗口在一个类名为"WorkerW"的窗口下面,如图:

其中:窗口"FloderView"(类名SysListView32)即为桌面图标窗口,因此,老的方法自然无法成功,但是由于类名为"WorkerW"的窗口不止一个,所以必须遍历到含有类名为"SHELLDLL_DefView"子窗口的才是,故:

Windows 7下,我们取桌面图标窗口的句柄使用以下语句:

HWND dwndparent;
HWND dwndviem=NULL;
HWND dwdesktopicon;
dwndparent=FindWindowEx(0,0,L"WorkerW",L"");//获得第一个WorkerW类的窗口,
while((!dwndviem)&&dwndparent)//因为可能会有多个窗口类名为“WorkerW”的窗口存在,所以只能依次遍历
{
dwndviem=FindWindowEx(dwndparent,0,L"SHELLDLL_DefView",0);
dwndparent=FindWindowEx(0,dwndparent,L"WorkerW",L"");
}
dwdesktopicon=FindWindowEx(dwndviem,0,L"SysListView32",L"FolderView");

好了,经过尝试,这段代码确实可以再win7下正常工作,但是肯定不能再winXp下正常工作(我没有尝试),因此,要写出具有通用性的代码,这段代码还需网友改进(其实上面两段代码加以判断叠加即可)

综上:在win7/WIN10下,桌面图标窗口的层级从上到下为:(通过spy++来查看窗口的层级关系等信息!)

"#32769 (桌面)"  ---> "WorkerW" ---> "SHELLDLL_DefView" ---> "SysListView32"   (根据窗口类名排列)

"#32769 (桌面)":为桌面窗口,通过函数GetDesktopWindow即可获得该窗口句柄;

“SysListView32”:为包含桌面图标的窗口,其实是一个CListCtrl类列表控件,所以要想操作桌面上图标可以通过操作列表控件来操作!

Windows 7桌面显示图标窗口句柄的获取的更多相关文章

  1. Windows 2012桌面显示“我的电脑”

    Windows 2012桌面显示“我的电脑”  rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0 

  2. Windows 托盘区域显示图标

    NOTIFYICONDATA structure 这个结构体包含了向通知区域(底部任务栏右下角区域,下面都称为托盘)显示的信息.需要使用函数Shell_NotifyIcon. 结构体成员 typede ...

  3. Windows Server 2008 显示桌面图标

    相信有朋友们有安装使用过windows 2008 server服务器,刚安装好的时候,桌面上只有一个回收站的图标,它没有像windows 7或windows 8一样可以直接通过右击鼠标的菜单来设置,要 ...

  4. 在linux桌面上显示图标

    把应用程序的图标添加到桌面上 左图显示了把应用程序的图标添加到桌面上的两种方法,哪种更好看? 想要把应用程序图标添加到桌面上,请先确保已设置了在桌面上显示图标,方法是: 1.安装gnome-tweak ...

  5. Windows桌面快捷图标上的小箭头的恢复

    Windows桌面快捷图标上的小箭头的恢复.. 桌面快捷图标上的小箭头的恢复: cmd /k reg add "HKEY_CLASSES_ROOT\lnkfile" /v IsSh ...

  6. windows 触发桌面图标布局保存

    问题: 项目原有的一套结构由于引进了一个磁盘套件,类似于关闭系统的explorer.exe进程,进入到他所维护的explorer.exe中.于是出现了当退出磁盘的时候没有保存好桌面布局信息导致下次进入 ...

  7. windows之桌面程序引导功能

    经常使用windows系统的同学可能都会遇到这样一种情况,刚按照完的应用程序,可能会在桌面产生一个提示信息,指示当前快捷方式可以使用了,并给出相应的文字说明,指示该快捷方式的功能.那么大家有没有考虑过 ...

  8. 如何实现桌面App图标可以动态显示消息数(类似手机上的QQ图标)?

    手机上的APP , 像QQ和微信等都可以在图标上动态显示消息数(最大99) , 那么你有没有想过这些效果是如何实现的?桌面上开发的传统应用程序能否也实现类似的功能? 1 思路 桌面快捷方式的图标本质上 ...

  9. Linux下通过.desktop 文件创建桌面程序图标及文件编写方式(Desktop Entry文件概述)

    Linux下通过.desktop 文件创建桌面程序图标及文件编写方式 1.Desktop Entry文件概述:在 Windows 平台上,用户可以通过点击位于桌面或菜单上的快捷方式轻松打开目标应用程序 ...

随机推荐

  1. 在Entity Framework 中实现继承关系映射到数据库表

    继承关系映射到数据库表中有多种方式: 第一种:TPH(table-per-hiaerachy) 每一层次一张表 (只有一张表) 仅使用名为父类的类型名的一张表,它包含了各个子类的所有属性信息,使用区分 ...

  2. View Programming Guide for iOS ---- iOS 视图编程指南(三)---Windows

    Windows Every iOS application needs at least one window—an instance of the UIWindow class—and some m ...

  3. k8s-存储卷2-configMap-Secret-十三

    一.StorageClass 在前一篇文章中,手动定义了pv,并让pvc关联至pv:现实中在pvc申请存储空间时,未必就有现成的pv符合pvc申请的需求,该怎么办呢? Kubernetes提供了描述存 ...

  4. ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 20. Model Binding

    模型绑定 这是个最简单的绑定 先从表单找.再从路由的值上找,最后去QueryString上找 通过反射获取这个类型的属性进行填充.反射完有几个属性,就开始去找着几个属性并绑定值 复杂类型 最后又加了一 ...

  5. 图像分类与KNN

    1 图像分类问题 1.1 什么是图像分类 所谓图像分类问题,就是已有固定的分类标签集合,然后对于输入的图像,从分类标签集合中找出一个分类标签,最后把分类标签分配给该输入图像.虽然看起来挺简单的,但这可 ...

  6. python 标准库大全

    python 标准库 文本 string:通用字符串操作 re:正则表达式操作 difflib:差异计算工具 textwrap:文本填充 unicodedata:Unicode字符数据库 string ...

  7. 图论之最小生成树之Kruskal算法

    Kruskal算法,又称作为加边法,是配合并查集实现的. 图示: 如图,这是一个带权值无向图我们要求它的最小生成树. 首先,我们发现在1的所有边上,连到3的边的边权值最小,所以加上这条边. 然后在3上 ...

  8. ubuntu 18 安装virtulenv以及virtualenvwrapper

    转自: https://www.jianshu.com/p/06533f19c4ad 首先安装pip,如果用的python3版本要安装pip3(自行google) sudo apt install v ...

  9. Jmeter之聚合报告

    1.添加线程组,添加请求接口 2.设置线程组 3.线程组右击添加—>监听器—>聚合报告

  10. Hdu 5439 Aggregated Counting (2015长春网络赛 ACM/ICPC Asia Regional Changchun Online 找规律)

    题目链接: Hdu 5439 Aggregated Counting 题目描述: 刚开始给一个1,序列a是由a[i]个i组成,最后1就变成了1,2,2,3,3,4,4,4,5,5,5.......,最 ...