中国高房价的罪魁祸首:桌面窗口的一些发现

来源:百度文库 编辑:偶看新闻 时间:2024/04/27 19:52:05

桌面窗口的一些发现

分类: windows开发 2009-07-08 21:00 699人阅读 评论(2) 收藏 举报

最近因业务需要,玩了一下全屏问题。后来,对windows xp sp2的桌面窗口产生了兴趣。写了段代码,玩了一下。同时结合网上的一些知识,发现了以下一些现象。

首先窗口名有#32769、Progman、Shelldll_defview和SysListView32。从第一个到最后一个都是成父子关系。可以通过

[cpp] view plaincopy?
  1. m_pwnd = GetDesktopWindow();  
  2. m_hDesktop_Progran = ::FindWindow( _T("Progman"), NULL );  
  3. if( NULL == m_hDesktop_Progman)  
  4. {  
  5.     return;  
  6. }  
  7. if( NULL != m_hDesktop_Progman )   
  8.     m_hDesktop_Shelldll_defview = FindWindowEx( m_hDesktop_Progran, NULL, _T("SHELLDLL_DefView"), NULL );  
  9. if( NULL != m_hDesktop_Shelldll_defview )   
  10.     m_hDesktop_Syslistview32 = FindWindowEx( m_hDesktop_Shelldll_defview, NULL, _T("SysListView32"), NULL );  

分别得到#32769的窗口指针和其他窗口的句柄。

发现:

1 SysListView32窗口主要是显示快捷方式等桌面上文件的。如果隐藏这个窗口,那么桌面上显示的那些东西都没有了,但是你会发现鼠标的右键还是可以打开菜单的。如果在隐藏这个窗口之后右键新建一个东西(如文件夹),则也没有显示出来,再把这个窗口Show出来,则这个刚新建文件夹就显示出来了。

2 Shelldll_defview窗口在网上的一些说法中认为主要是为了响应一些事件,在这一层可以获得焦点。将Shelldll_defview窗口隐藏后,桌面上的文件也会消失,鼠标在桌面上右击将没有任何效果。其实这样的判断是不准确的。因为可以认为是SysListView32被隐藏,而右击桌面显示的菜单只有在SysListView32窗口中显示,即可以理解为Shelldll_defview隐藏后右击是产生菜单的,而因为SysListView32被隐藏而没有看到。因此为了验证,我就设计了一个功能,将Shelldll_defview窗口缩小(缩小而缩小),在这个窗口的左上角再上一点右击桌面,使预期产生的菜单会覆盖这个窗口,而实际上我发现这个可以产生并显示菜单的窗口没有出现菜单的任何痕迹。同时我发现SysListView32因Shelldll_defview缩小而缩小,SysListView32因Shelldll_defview隐藏而不可见。

3 隐藏Progran,SysListView32和Shelldll_defview也会隐藏,但是如果改变Progman大小,SysListView32和Shelldll_defview大小却不会因此而改变。

4 对#32769窗口隐藏和显示都没有效果。

 

我将再生成一些窗体,使其父窗口指向桌面的四个窗口。

发现如下:

1 新建窗体,使其父窗口为SysListView32。使Syslistview32窗口前置,发现新建窗口仍然完整显示。

2 新建窗体,使其父窗口为Shelldll_defview。使Syslistview32窗口前置,发现新建窗体消失,但是隐藏SysListView32后这个窗体出现,证明SysListView32遮住了这个窗体。

3 新建窗体,使其父窗口为Progman。使Shelldll_defview窗口前置,发现新建窗体消失,但是隐藏Shelldll_defview后这个窗体出现,证明Shelldll_defview遮住了这个窗体。

4 新建窗体,使其父窗口为#32769。使Progman窗口和Shelldll_defview窗口都前置,这个新建的窗体没有发生改变。

以上可以发现SysListView32和Shelldll_defview两个窗体都不是透明的。

A 在1 2 3三个步骤中新建的窗体使用win+D是不可以最小化以显示桌面的,而4中新建的窗体可以使用win+D最小化以显示桌面。

B 同时4 3 ,开始时只显示4中新建窗口,win+D都消失,再win+D ,3和4中新建窗口都出现了。同时桌面失去焦点,继续win+D就没用了。点击桌面,win+D,4中窗口消失,3中保持不变。

C 同时4 2,开始时4中新建窗口显示而2中新建窗口不显示。win+D,4中新建窗口消失,2中窗口仍然不显示出来。

D 同时4 1,开始时1和4中新建窗口都显示出来。win+D,1和4新建窗口都消失。

这组中可以不考虑4的干扰。因为4的现象一直很稳定。

在以上的探究中,我一直不清楚这四层窗口的摆放顺序。但是如果想新建一个窗口而最少的受桌面操作的影响,就是用2中的方法。

打开电脑发现一些桌面的工具被自动删除 寻找一些桌面窗口外观资源站点 隐藏桌面任务栏的窗口 为什么每次关闭一些应用软件桌面就会弹出一个应用程序错误的窗口 计算机开机进入一个窗口后退出来,发现桌面的标题蓝不能使用,这是为什么啊?????求救!!!!! 我点击桌面QQ 发现窗口打不开,桌面提示没有找到MSIMG32.dll,我不知怎么办? 我的显示器打开一些小的窗口的时候,会看见桌面有点变型的,是为什么啊?? 关桌面窗口的快捷键是哪个? 电脑每次关闭一些窗口回到桌面时,桌面图表都会消失,几秒钟后恢复 电脑每次关闭一些窗口回到桌面时,桌面图表都会消失,几秒钟后恢复 莫名其妙的弹出一些窗口~~ 请问98的窗口和桌面能换成XP窗口和桌面吗? 最近发现的一些问题 为什么我的IE浏览器总是有弹出窗口?一些心理测验,手机下载歌曲的一类,没发现程序有什么异常啊 桌面的状态栏不显示最小化的窗口怎麽办 怎样去除迅雷的桌面新闻窗口的弹出 有没有将桌面窗口全都最小化的快捷键? 文档的窗口最大化后会占满整个桌面吗? 98窗口和桌面能换成XP的吗? 浏览器窗口怎么固定在桌面的最前面? 桌面弹出一个对话框系统错误无效的窗口句柄 如何关闭桌面 windows文件保护的提示窗口 右键点桌面的属性,却打不开属性窗口 可以把QQ聊天窗口设置在桌面的最前吗?