如何制作'永远在底'窗口

Veg*_*gar 7 c# delphi

有没有人知道如何制作一个"永远在底"的窗户,或者固定在桌面上的窗户?它应该接收焦点和鼠标点击,但应该保持在Z顺序的底部.即使用户最小化全部或显示桌面操作,它也可以保留在桌面上.

delphi和c#解决方案(或部分解决方案/提示)都会很棒.

Mau*_*gan 12

警告建议您可以通过调用SetParent并将窗口设置为桌面的子项来完成此操作.如果你这样做,你会在Win32窗口管理器到桌面的输入队列相结合,你的子窗口,这是一个糟糕的事情 - 雷蒙德陈解释了原因.

另外,请记住,使用HWND_BOTTOM调用SetWindowPos是不完整的.每当窗口改变zorder时,您都需要这样做.处理WM_WINDOWPOSCHANGING事件,查看SWP_NOZORDER以获取更多信息.


Ano*_*ous 8

SetWindowPos可以使Windows AlwaysOnTop.很可能它会产生相反的结果.尝试这些方面:

[DllImport("user32.dll")]
static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X,
   int Y, int cx, int cy, uint uFlags);


 public const uint SWP_NOSIZE          = 0x0001;
 public const uint SWP_NOMOVE          = 0x0002;
 public const uint SWP_NOACTIVATE      = 0x0010;
 public const int HWND_BOTTOM = 1;


SetWindowPos(hWnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE);
Run Code Online (Sandbox Code Playgroud)

注意:

  • 没有测试过这种方法(使窗户始终在底部)
  • 如果它恰好工作,那么很可能show桌面操作将隐藏窗口.所以也许你应该更深入地研究这个"漂亮"的API.

编辑:完成一些搜索沿着这些线来确认它是否会发挥作用,并找到一些有趣的东西 - 重复.