デスクトップウィンドウのいくつかの発見
最近、業務のため、フルスクリーンの問題をしました.その後、windows xp sp 2のデスクトップウィンドウに興味を持ちました.コードを書いて、遊びました.同時にネット上のいくつかの知識を結びつけて、以下の現象を発見しました.(転載は出典を明記してください)
まず、ウィンドウ名は#32769、Progman、Shelldll_defviewとSysListView 32.最初から最後まで親子関係です.に合格
それぞれ#32769のウィンドウポインタと他のウィンドウのハンドルを得た.
検出:
1 SysListView 32ウィンドウは、主にショートカットなどのデスクトップ上のファイルを表示します.このウィンドウを非表示にすると、デスクトップに表示されているものはありませんが、マウスの右ボタンでメニューを開くことができます.このウィンドウを非表示にして右クリックしてフォルダなどのものを新規作成しても表示されず、このウィンドウをShowすると、この新規フォルダが表示されます.
2 Shelldll_defviewウィンドウは、ネット上のいくつかの説では、主にいくつかのイベントに応答するために、このレベルで焦点を得ることができると考えられています.Shelldll_defviewウィンドウが非表示になると、デスクトップ上のファイルも消え、マウスをデスクトップ上で右クリックしても効果はありません.実はこのような判断は正確ではありません.SysListView 32が非表示になっていると考えられるため、デスクトップを右クリックして表示するメニューはSysListView 32ウィンドウにしか表示されない、つまりShelldll_と理解できるdefview非表示後の右クリックは、SysListView 32が非表示になっているため、メニューが生成されます.そこで検証のためにShelldll_をdefviewウィンドウ縮小(縮小して縮小)このウィンドウの左上にデスクトップを少し右クリックし、予想されるメニューがこのウィンドウを上書きするようにしたが、実際にはメニューを生成して表示できるウィンドウにメニューの痕跡がないことに気づいた.また、Shelldll_defviewが縮小したためSysListView 32が縮小し、Shelldll_defviewが非表示になったためSysListView 32が非表示になったことに気づいた.
3 Progran,SysListView 32,Shelldll_を非表示defviewも非表示になりますが、Progmanサイズを変更するとSysListView 32とShelldll_defviewサイズは変更されません.
4対32769ウィンドウの非表示と表示には効果がありません.
親ウィンドウがデスクトップの4つのウィンドウを指すように、フォームをさらに生成します.
次のように検出されました.
1親ウィンドウがSysListView 32になるようにフォームを新規作成します.Syslistview 32ウィンドウを前にすると、新しいウィンドウがまだ完全に表示されていることがわかります.
2親ウィンドウがShelldllになるようにフォームを新規作成defview.Syslistview 32ウィンドウを前置すると、新しいフォームが消えていることがわかりますが、SysListView 32を隠すとこのフォームが現れ、SysListView 32がこのフォームを隠していることを証明します.
3親ウィンドウがProgmanになるようにフォームを新規作成します.Shelldll_をdefviewウィンドウの前置で、新しいフォームが消えているのを発見しましたが、Shelldll_を隠します.defview後にこのフォームが現れ、Shelldll_を証明します.defviewはこのフォームを隠しました.
4新しいフォームを作成し、親ウィンドウを#32769にします.ProgmanウィンドウとShelldll_をdefviewウィンドウはすべて前置されており、この新しいフォームは変更されていません.
SysListView 32とShelldll_defviewの2つのフォームは透明ではありません.
A 1 2 3の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の現象はずっと安定しているからです.
以上の探究の中で、私はずっとこの4階の窓の配置順序を理解していません.しかし、デスクトップ操作の影響を最小限に抑えるためにウィンドウを新規作成するには、2の方法を使用します.
(転載は出典を明記してください)
まず、ウィンドウ名は#32769、Progman、Shelldll_defviewとSysListView 32.最初から最後まで親子関係です.に合格
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 SysListView 32ウィンドウは、主にショートカットなどのデスクトップ上のファイルを表示します.このウィンドウを非表示にすると、デスクトップに表示されているものはありませんが、マウスの右ボタンでメニューを開くことができます.このウィンドウを非表示にして右クリックしてフォルダなどのものを新規作成しても表示されず、このウィンドウをShowすると、この新規フォルダが表示されます.
2 Shelldll_defviewウィンドウは、ネット上のいくつかの説では、主にいくつかのイベントに応答するために、このレベルで焦点を得ることができると考えられています.Shelldll_defviewウィンドウが非表示になると、デスクトップ上のファイルも消え、マウスをデスクトップ上で右クリックしても効果はありません.実はこのような判断は正確ではありません.SysListView 32が非表示になっていると考えられるため、デスクトップを右クリックして表示するメニューはSysListView 32ウィンドウにしか表示されない、つまりShelldll_と理解できるdefview非表示後の右クリックは、SysListView 32が非表示になっているため、メニューが生成されます.そこで検証のためにShelldll_をdefviewウィンドウ縮小(縮小して縮小)このウィンドウの左上にデスクトップを少し右クリックし、予想されるメニューがこのウィンドウを上書きするようにしたが、実際にはメニューを生成して表示できるウィンドウにメニューの痕跡がないことに気づいた.また、Shelldll_defviewが縮小したためSysListView 32が縮小し、Shelldll_defviewが非表示になったためSysListView 32が非表示になったことに気づいた.
3 Progran,SysListView 32,Shelldll_を非表示defviewも非表示になりますが、Progmanサイズを変更するとSysListView 32とShelldll_defviewサイズは変更されません.
4対32769ウィンドウの非表示と表示には効果がありません.
親ウィンドウがデスクトップの4つのウィンドウを指すように、フォームをさらに生成します.
次のように検出されました.
1親ウィンドウがSysListView 32になるようにフォームを新規作成します.Syslistview 32ウィンドウを前にすると、新しいウィンドウがまだ完全に表示されていることがわかります.
2親ウィンドウがShelldllになるようにフォームを新規作成defview.Syslistview 32ウィンドウを前置すると、新しいフォームが消えていることがわかりますが、SysListView 32を隠すとこのフォームが現れ、SysListView 32がこのフォームを隠していることを証明します.
3親ウィンドウがProgmanになるようにフォームを新規作成します.Shelldll_をdefviewウィンドウの前置で、新しいフォームが消えているのを発見しましたが、Shelldll_を隠します.defview後にこのフォームが現れ、Shelldll_を証明します.defviewはこのフォームを隠しました.
4新しいフォームを作成し、親ウィンドウを#32769にします.ProgmanウィンドウとShelldll_をdefviewウィンドウはすべて前置されており、この新しいフォームは変更されていません.
SysListView 32とShelldll_defviewの2つのフォームは透明ではありません.
A 1 2 3の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の現象はずっと安定しているからです.
以上の探究の中で、私はずっとこの4階の窓の配置順序を理解していません.しかし、デスクトップ操作の影響を最小限に抑えるためにウィンドウを新規作成するには、2の方法を使用します.
(転載は出典を明記してください)