日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

桌面窗口的一些发现

發布時間:2023/11/27 生活经验 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 桌面窗口的一些发现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? ?最近因業務需要,玩了一下全屏問題。后來,對windows xp sp2的桌面窗口產生了興趣。寫了段代碼,玩了一下。同時結合網上的一些知識,發現了以下一些現象。(轉載請指明出處)

? ? ? ? 首先窗口名有#32769、Progman、Shelldll_defview和SysListView32。從第一個到最后一個都是成父子關系??梢酝ㄟ^

m_pwnd = GetDesktopWindow();
m_hDesktop_Progran = ::FindWindow( _T("Progman"), NULL );
if( NULL == m_hDesktop_Progman)
{return;
}
if( NULL != m_hDesktop_Progman ) m_hDesktop_Shelldll_defview = FindWindowEx( m_hDesktop_Progran, NULL, _T("SHELLDLL_DefView"), NULL );
if( NULL != m_hDesktop_Shelldll_defview ) 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兩個窗體都不是透明的。

  • ?在1 2 3三個步驟中新建的窗體使用win+D是不可以最小化以顯示桌面的,而4中新建的窗體可以使用win+D最小化以顯示桌面。
  • 同時4 3 ,開始時只顯示4中新建窗口,win+D都消失,再win+D ,3和4中新建窗口都出現了。同時桌面失去焦點,繼續win+D就沒用了。點擊桌面,win+D,4中窗口消失,3中保持不變。
  • 同時4 2,開始時4中新建窗口顯示而2中新建窗口不顯示。win+D,4中新建窗口消失,2中窗口仍然不顯示出來。
  • 同時4 1,開始時1和4中新建窗口都顯示出來。win+D,1和4新建窗口都消失。

? ? ? ? 這組中可以不考慮4的干擾。因為4的現象一直很穩定。
? ? ? ? 在以上的探究中,我一直不清楚這四層窗口的擺放順序。但是如果想新建一個窗口而最少的受桌面操作的影響,就是用2中的方法。

?(轉載請指明出處)

總結

以上是生活随笔為你收集整理的桌面窗口的一些发现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。