如何确保窗口始终置底在桌面上?

在 windows 系统中,如何确保窗口始终置底在桌面上?
需求细节:

  • 窗口始终显示在桌面上
  • 无法被最小化,即使用户按下WIN+D,或点击任务栏最右侧的【显示桌面】按钮,窗口依然显示在桌面上;
  • 窗口在桌面图标之上
  • 窗口激活后,不能遮挡除桌面之外的其他程序;
  • 即使桌面崩溃重启后,依然保持上述特性;
  • 当该程序启动多个此类窗口后,彼此之间的窗口Z轴顺序可以正常切换,但都要确保保持上述特性;

请使用 C++/QT/Delphi 代码演示,需符合所有细节条件,谢谢。

这是使用C++/QT实现窗口始终置底的代码演示:

#include <QApplication>
#include <QWidget>
#include <QDesktopWidget>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    // 创建一个QWidget窗口
    QWidget widget;
    widget.setGeometry(QApplication::desktop()->screenGeometry());

    // 设置窗口始终置底
    widget.setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowStaysOnBottomHint);
    widget.show();

    return a.exec();
}

在上面的代码中,我们创建了一个QWidget窗口,并使用setWindowFlags()函数将其设置为始终置底。Qt::WindowStaysOnBottomHint参数指示窗口始终置底。Qt::FramelessWindowHint参数用于隐藏窗口边框。Qt::Window参数用于指定窗口类型。

在Delphi中,可以使用以下代码实现窗口始终置底:

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure SetWindowBottom(Handle: HWND);
begin
  SetWindowPos(Handle, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  // 设置窗口始终置底
  SetWindowBottom(Handle);
end;

end.

在窗口创建时调用SetWindowBottom()函数,将窗口设置为始终置底。SetWindowPos()函数用于设置窗口的位置和大小。HWND_BOTTOM参数指示窗口始终置底。SWP_NOMOVE和SWP_NOSIZE参数用于保持窗口位置和大小不变。SWP_NOACTIVATE参数用于防止窗口激活。

感觉你是要做一个桌面

你看看这个

SetWindowPos(targetHwnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);