Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winapi 一扇窗户怎么可能是;钉住;到桌面表面?_Winapi - Fatal编程技术网

Winapi 一扇窗户怎么可能是;钉住;到桌面表面?

Winapi 一扇窗户怎么可能是;钉住;到桌面表面?,winapi,Winapi,这个问题更多的是学术性而不是实用性,并且不涉及任何一种特定的语言。为了便于讨论,我们将使用Win32 API 创建具有以下行为目标的窗口的最合适方法是什么: Z顺序低于除桌面外的其他所有窗口 无法通过单击鼠标或键盘使其显示在比其他窗口更高的z顺序上 可以假设窗口是无边界的。这里有两种基本方法:- 使您的窗口成为桌面的“子窗口” 使您的窗口仅拒绝接受焦点或激活:- windows窗口管理器的神奇之处在于没有一个。相反,由于系统中所有窗口的紧急行为(即它们对消息的反应),出现了一个窗口管理器的外

这个问题更多的是学术性而不是实用性,并且不涉及任何一种特定的语言。为了便于讨论,我们将使用Win32 API

创建具有以下行为目标的窗口的最合适方法是什么:

  • Z顺序低于除桌面外的其他所有窗口
  • 无法通过单击鼠标或键盘使其显示在比其他窗口更高的z顺序上

可以假设窗口是无边界的。

这里有两种基本方法:-

  • 使您的窗口成为桌面的“子窗口”
  • 使您的窗口仅拒绝接受焦点或激活:-
  • windows窗口管理器的神奇之处在于没有一个。相反,由于系统中所有窗口的紧急行为(即它们对消息的反应),出现了一个窗口管理器的外观,在99%的情况下,这是由DefWindowProc处理的

    这意味着您可以通过在DefWindowProc之前处理消息来颠覆许多正常的窗口管理器类型行为。如果您创建一个窗口,并使用z-order底部的相关标志将其定位,然后处理诸如
    WM_WINDOWPOSCHANGING
    之类的消息,您可以确保您的窗口从未收到激活或焦点,并且始终设置z-bottom标志,即使其他应用程序调用SetWindowPos时也是如此

    这两种方法都有问题,因为很难找出桌面窗口是什么。GetDesktopWindow返回只有在资源管理器崩溃时才可见的窗口句柄。其余时间,可见桌面是一个由资源管理器创建的窗口,最终是一个syslistview控件。Spy+++Findwindow将为您提供一个您希望位于上方的窗口的句柄