如何最小化任务栏的窗口?(即没有iconify)

Ian*_*oyd 7 windows delphi delphi-5 windows-7 windows-95

我有一个窗口,我想最小化(到任务栏),所以我打电话ShowWindow:

ShowWindow(Handle, SW_MINIMIZE);
Run Code Online (Sandbox Code Playgroud)

除了不是最小化自身(到任务栏),窗口被图标化:

在此输入图像描述

窗口是无人值守的:

在此输入图像描述

如何最小化任务栏的窗口?


更新:

根据2002年的一些建议,我尝试设置WS_EX_APPWINDOW窗口样式和/或确保窗口没有所有者:

在此输入图像描述

不幸的是,这改变了我的(Delphi)应用程序的行为,因为我的应用程序现在有两个任务栏图标,而不是一个:

在此输入图像描述

当然,这是Delphi(5)的神器; 因为我试图解决另一个问题.

但这不应该影响这个问题.我正在调用ShowWindow(..., SW_MINIMIZE)API,而不是最小化窗口Windows正在图标化应用程序.

如何最小化任务栏的窗口?

NGL*_*GLN 10

任务栏上的该图标是Application(Handle)的图标,而不是MainForm的图标.

使用:

Application.Minimize;
Run Code Online (Sandbox Code Playgroud)

编辑:但是从你的链接中,我知道你已经知道了......呃;)

这适用于MainForm:

TForm1 = class(TForm)
private
  procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
protected
  procedure CreateParams(var Params: TCreateParams); override;

...

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  with Params do
  begin
    ExStyle := ExStyle or WS_EX_APPWINDOW;
    WndParent := GetDesktopWindow;
  end;
end;

procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
  if Msg.CmdType = SC_MINIMIZE then
    ShowWindow(Handle, SW_MINIMIZE)
  else
    inherited;
end;
Run Code Online (Sandbox Code Playgroud)

并从任务栏隐藏Application.Handle(只有MainForm的任务栏图标):Visible将此Form 的属性设置为True并在项目文件中隐藏Application:

Application.Initialize;
Application.CreateForm(TForm1, Form1);
ShowWindow(Application.Handle, SW_HIDE);
Application.Run;
Run Code Online (Sandbox Code Playgroud)

对于这种形式,ShowWindow(Handle, SW_MINIMIZE);shóuld工作.它还在最小化或恢复时提供Windows的默认缩放功能.

(在XP和W7上使用D5和D7测试)