在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)
{
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桌面的句柄会变,暂时不知道在什么情况下会变。

有时是 WorkerW--> SHELLDLL_DefView,

有时是 Progman --> SHELLDLL_DefView

在windows 8时代 又有所变化 如图:

 //得到桌面ListView控件句柄/*HWND hTop=FindWindow(TEXT("Progman"), NULL);    //得到最上层窗口句柄HWND hFirst=GetFirstChild(hTop);                //得到第一个子窗口 WorkerWHWND hNext=GetWindow(hFirst,GW_HWNDNEXT);       //得到同一级的下一个窗口 SHELLDLL_DefViewHWND hWndLV=GetFirstChild(hNext);               //得到桌面控件句柄*/HWND hWndLV=GetFirstChild(GetWindow(GetFirstChild(FindWindow(TEXT("Progman"), NULL)), GW_HWNDNEXT));

得到win7 win8的桌面句柄相关推荐

  1. 【技术贴】虚拟机 VMware win7 win8网卡驱动下载 解决虚拟机不识别网卡没有本地连接...

    解决虚拟机VMware7.0下虚拟win7 win8找不到网卡,不能识别网卡.没有本地连接.(本篇文章只适合虚拟机win7/win8 32位环境) 废话不多说,直接入题.vmware 虚拟机 win7 ...

  2. win7仿linux主题,linuxmint 16 cinnamon模仿win7/win8主题

    搞了一天,终于差不多完成了模仿win7/win8风格的linuxmint哦-! 之前在百度找过类似的教程,在教程中我看到了一个noobslab网站,点击进去发现这是一个关于linux 的网站,网站的风 ...

  3. win8 远程桌面时提示凭证不工作问题的终极解决办法

    原文 win8 远程桌面时提示凭证不工作问题的终极解决办法 环境说明 远程办公电脑(放置于公司.自用办公电脑.win8系统) 远程连接客户机(放置于家中.家庭日常所用.win8系统) 故障现象 最近在 ...

  4. Win7/Win8.1升级Win10后屏幕一直闪烁怎么办?

    有些用户在把Win7/Win8.1升级到Win10正式版后,发现屏幕一直不停闪烁,以至于无法正常使用.出现这种情况的原因可能有很多,微软社区的论坛审阅人Alex_Shen给出了一种解决方案:进入安全模 ...

  5. 不从Win7/Win8.1升级,直接全新安装并激活Win10方法

    不从Win7/Win8.1升级,直接全新安装并激活Win10方法(转自IT之家):方法简单方便, 感觉可节省不少时间,所以搬运分享给大家.        本文针对那些还没有升级Win10的Win7/W ...

  6. 笔记本在Win7/Win8/win8.1下安装OS X 10.9.3懒人版通用教程

    转载地址: http://bbs.pcbeta.com/viewthread-1432534-1-1.html Intel 酷睿第二代移动CPU(Sandy Bridge+HM65,HM66等6系列移 ...

  7. Dell计算机装Win8,超简单戴尔重装win7/win8系统完整教程

    戴尔电脑是目前的电脑品牌市场上的主流品牌之一,受到大众的认可.为了让各位朋友更好的使用自己的戴尔电脑,在此特意跟大家分享一份戴尔电脑重装win7系统的详细教程.下面是学习啦小编跟大家分享的是超简单戴尔 ...

  8. 计算机各个盘的作用,C盘各个文件夹/文件的作用是什么(Win7/Win8/Win10系统)?

    C盘各个文件夹/文件的作用是什么(Win7/Win8/Win10系统)?有些事情,高手不屑于为我们讲解,有些是因为确实有难度.对于系统文件,大多数朋友都会讳莫如深,好像多神秘似的,今天笔者来吃这个螃蟹 ...

  9. win7计算机桌面快捷键显示,Win7的显示桌面在哪 Win7显示桌面快捷键是什么

    在Windows XP系统时代,在桌面任务栏左下角有一个快速显示桌面的按钮,不过在Win7系统中,我们已经咋桌面左下角任务栏里边找不到显示桌面的快捷按钮了.如今XP系统已经在逐渐减少,流行的Win7系 ...

最新文章

  1. LeetCode 122. Best Time to Buy and Sell Stock II--贪心--Java,C++,Python解法
  2. 利用HTTP Cache来优化网站
  3. System.Threading.Interlocked.Exchange(ref m_Value, value);
  4. 华为4g无线路由器虚拟服务器设置方法,华为4g2pro路由器虚拟服务器设置
  5. python的gui编程pyqt5_Python-GUI编程-PyQt5
  6. 安装WampServer时出现的问题(丢失VCRUNTIME140.dll或MSVCR110.dll)以及解决办法
  7. 【Objecitve C代码】让对象沿着某条路径移动的动画效果
  8. Codecraft-17 and Codeforces Round #391 (Div. 1 + Div. 2, combined)
  9. 简单易学的机器学习算法——极限学习机(ELM)
  10. MySQL数据库面试题(2020最新版)
  11. java实验报告9 面向接口编程
  12. 托福、雅思、托业有什么区别?
  13. 两个路由器无线连接教程
  14. 基于JavaEE的开放平台出租车系统_JSP网站设计_MySQL数据库设计
  15. 1 分钟 Serverless 搭建你的首个个人网站(完成就送猫超卡)
  16. WordCloud库的安装教程
  17. 【圣诞限定】2022的末尾,送TA一颗圣诞树吧
  18. jsoncpp在vs2012下的环境搭建(C++)
  19. SVN如何本地拉取项目
  20. Elyse Alexander - Unplanned Song WA47电子管麦克风

热门文章

  1. Redis与DB数据同步问题
  2. 非微信打开不显示页面
  3. ASI和AFN的区别
  4. phalcon: eventManager事件管理(结合dispatcher调度控制器)制作简单的acl
  5. DDD领域驱动设计基本理论知识总结
  6. OSG的HUD抬头文字显示
  7. 使用JTextArea示例
  8. JDBC的学习(三)——以查询新闻系统为例
  9. flex的mxmlc命令行编译as3文件成swf
  10. MySQL数据表的创建、查看、插入