Mar*_*rks 13 delphi winapi taskbar delphi-2007
我想隐藏Windows 7任务栏中的应用程序.
我希望在屏幕边缘做一些工具栏,当用户点击它时会做某些事情,但我不希望它显示在任务栏中,因为它是我想要留在后台的东西.
我尝试了以下帖子中的说明,但它对我的应用程序无效:
然后我尝试了一个新的空VCL表单应用程序,它仍然无法正常工作.我搜索了其他解决方案,但它们都像链接的帖子一样做得非常相似.
有什么变化,这在Windows 7中是不可能的吗?或者你能想到什么,可以阻止它工作?
您可以覆盖主窗体CreateParam以删除强制任务栏按钮(WS_EX_APPWINDOW)的标志,并另外使应用程序窗口拥有该窗体.这与shell为窗口放置任务栏按钮的要求相反.从" 管理任务栏按钮 ":
[..]要确保窗口按钮放在任务栏上,请使用WS_EX_APPWINDOW扩展样式创建无主窗口.[..]
样品:
type
TForm1 = class(TForm)
protected
procedure CreateParams(var Params: TCreateParams); override;
end;
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.ExStyle := Params.ExStyle and not WS_EX_APPWINDOW;
Params.WndParent := Application.Handle;
end;
Run Code Online (Sandbox Code Playgroud)
MainFormOnTaskbar如果使用此方法,请不要将"Application" 的属性状态从其默认值"True" 更改.
您还可以删除第二行(..WndParent:= ..),而不是在对象检查器PopupMode中将表单设置pmExplicit为相同的效果.
顺便说一下,这里是TLama发布的解决方案相同主题的文档引用:
为了防止窗口按钮被放置在任务栏上,[...]作为替代方案,您可以创建一个隐藏窗口并使此隐藏窗口成为可见窗口的所有者.
设置MainFormOnTaskbar为false时,主窗体由VCL设计的应用程序窗口拥有.如果您隐藏应用程序窗口,则满足要求.
尝试使用以下描述的棘手方法this article:
MainFormOnTaskBar在项目文件中设置为False.然后尝试从主窗体OnShow和OnActivate事件处理程序中隐藏应用程序窗口.所以你的项目可能如下所示:
Project1.dpr:
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := False;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Run Code Online (Sandbox Code Playgroud)
Unit1.pas:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormShow(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormShow(Sender: TObject);
begin
ShowWindow(Application.Handle, SW_HIDE);
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
ShowWindow(Application.Handle, SW_HIDE);
end;
end.
Run Code Online (Sandbox Code Playgroud)