这个问题更具学术性而非实用性,不涉及任何一种特定语言。为了便于讨论,我们将使用Win32 API。
创建具有以下行为目标的窗口的最合适方法是什么:
可以假设窗口是无边框的。
答案 0 :(得分:2)
这里有两种基本方法: -
Windows窗口管理器的奇迹是没有一个。相反,由于系统中所有窗口的紧急行为,即窗口管理器的外观 - 即它们对消息的反应 - 在99%的情况下由DefWindowProc处理。
这意味着您可以通过在DefWindowProc之前处理消息来破坏许多正常的窗口管理器类型行为。如果您创建一个窗口,并使用{-3}}的z顺序底部的相关标记来定位它,然后处理WM_WINDOWPOSCHANGING
之类的消息,则可以确保您的窗口永远不会接收激活或焦点并且始终 - 即使其他应用程序调用SetWindowPos - 也始终设置了z-bottom标志。
这两种方法都存在问题,因为很难找出桌面窗口是什么。 GetDesktopWindow返回一个窗口的句柄,该窗口只有在资源管理器崩溃时才可见。其余的时间,可见桌面是由资源管理器创建的窗口 - 最终是一个syslistview控件。 Spy ++ + Findwindow将为您提供您想要在上面的窗口的句柄。