Windows 如何从任务栏中隐藏应用程序,并使窗口始终处于其上方

Windows 如何从任务栏中隐藏应用程序,并使窗口始终处于其上方,windows,delphi,taskbar,always-on-top,Windows,Delphi,Taskbar,Always On Top,我正在开发一个Delphi应用程序,它是一个小的实用程序窗口。其想法是,它始终位于所有其他窗口的顶部,向用户提供信息并允许用户按下按钮。我不想在任务栏上显示应用程序的图标,因为它是一个小实用程序,不应该妨碍用户,我还希望用户能够将它放在任务栏上,如果他愿意的话 我已经使用以下命令使其不显示任务栏图标: 我还发现了与全屏应用程序中任务栏上方的表单有关的内容: procedure TForm1.CreateParams(var Params: TCreateParams); begin inh

我正在开发一个Delphi应用程序,它是一个小的实用程序窗口。其想法是,它始终位于所有其他窗口的顶部,向用户提供信息并允许用户按下按钮。我不想在任务栏上显示应用程序的图标,因为它是一个小实用程序,不应该妨碍用户,我还希望用户能够将它放在任务栏上,如果他愿意的话

我已经使用以下命令使其不显示任务栏图标:

我还发现了与全屏应用程序中任务栏上方的表单有关的内容:

procedure TForm1.CreateParams(var Params: TCreateParams); 
begin
  inherited; 
  Params.Style := WS_POPUP or WS_VISIBLE; //will overlay taskbar
end;

我没能做到的是将两者结合起来。

第三方应用程序的窗口不可能总是Windows组件之上的“最顶级”窗口。例如,通过Windows组件,我指的是任务栏和任务管理器(勾选了“始终在顶部”选项)

如前所述,没有文档化的API用于将窗口设置为Z顺序中最顶层的窗口,而这样做的Windows组件似乎使用特殊的私有API来实现这一点

防止应用程序窗口隐藏在任务栏后面的一种(尽管不是很优雅)方法是使用
SetWindowPos(Handle、HWND_-TOPMOST、0、0、SWP_-NoMove或SWP_-NoSize)设置一个定时器,将其带到顶部
SetForegroundWindow

procedure TForm1.CreateParams(var Params: TCreateParams); 
begin
  inherited; 
  Params.Style := WS_POPUP or WS_VISIBLE; //will overlay taskbar
end;