在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. Bootstrap 网格系统的工作原理

    网格系统通过一系列包含内容的行和列来创建页面布局.下面列出了 Bootstrap 网格系统是如何工作的: 行必须放置在 .container class 内,以便获得适当的对齐(alignment)和 ...

  2. [转载]文件过滤驱动 文件系统激活通知 IoRegisterFsRegistrationChange函数实现

    IoRegisterFsRegistrationChange 注册一个文件系统变动回调函数,用来被通知文件系统的激活和注销,激活是指第一次加载文件系统,当一个文件系统已经加载后,当加载一个同种文件系统 ...

  3. View Controller Programming Guide for iOS---(六)---Responding to Display-Related Notifications

    Responding to Display-Related Notifications 响应跟显示相关的通知 When the visibility of a view controller’s vi ...

  4. Prepare for Mac App Store Submission--为提交到Mac 应用商店做准备

    返回 Mac App Store Prepare for Mac App Store Submission 提交到Mac 应用商店之前的准备 Most of your time is spent on ...

  5. django基础知识

    一.django的安装 1. pip3 install django 2. 把安装路径加到环境变量里以便以后启动admin相关命令,在windows系统中---我的电脑---属性----高级系统设置- ...

  6. 关于Android ListView组件中android:drawSelectorOnTop含义(转载)

    转自:http://yangguangfu.iteye.com/blog/902559 When set to true, the selector will be drawn over the se ...

  7. POJ2796【单调栈】

    题意: 题意:n个数,求某段区间的最小值*该段区间所有元素之和的最大值 思路: 主要参考:http://www.cnblogs.com/ziyi–caolu/archive/2013/06/23/31 ...

  8. POJ1861 kruskal.

    #include <iostream> #include <stdio.h> #include <string.h> #include <stack> ...

  9. NGUI Tween几种用法随手记

    需要明确下几种动画的用法 play begin EventDelegate.add TweenPlayer ---------------------------------------------- ...

  10. scrapy将爬取到的数据存入elasticsearch

    pip安装 elasticsearch-dsl的包, 是elasticsearch提供给python 的接口 if __name__ == "__main__": 这个用来调试,还 ...