我正在开发一个Delphi应用程序,它是一个小型实用程序窗口。这个想法是,它始终位于所有其他窗口的顶部,为用户提供信息并允许他按下按钮。我不想在任务栏中显示应用程序的图标,因为它是一个小实用程序,不应该妨碍用户,我也希望用户能够将其放在任务栏上,如果他愿意的话。
我已经可以使用此问题中的以下内容不显示任务栏图标:
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.ExStyle := Params.ExStyle and not WS_EX_APPWINDOW;
Params.WndParent := Application.Handle;
end;
我还发现了另一个问题,它与全屏应用程序中任务栏上方的表单有关:
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, 0, 0, SWP_NoMove or SWP_NoSize);
或 SetForegroundWindow
将其置于顶部。