如何最小化窗口到任务栏? (即不iconify)

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

 ShowWindow(Handle, SW_MINIMIZE); 

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

在这里输入图像说明

该窗口是未登记的:

在这里输入图像说明

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


更新:

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

在这里输入图像说明

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

在这里输入图像说明

这当然是delphi的一个神器(5)。 因为我试图解决另一个问题 。

但是这不应该影响这个问题。 我打电话给ShowWindow(..., SW_MINIMIZE) API,而不是最小化窗口窗口的图标化应用程序。

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

任务栏上的该图标是应用程序(句柄)的图标,而不是MainForm的图标。

使用:

 Application.Minimize; 

编辑:但是,你的链接,我明白你知道,已经…呃;)

这适用于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; 

并从任务栏隐藏Application.Handle(只有MainForm的任务栏图标):将此窗体的Visible属性设置为True ,并将该应用程序隐藏在项目文件中:

 Application.Initialize; Application.CreateForm(TForm1, Form1); ShowWindow(Application.Handle, SW_HIDE); Application.Run; 

对于这种形式, ShowWindow(Handle, SW_MINIMIZE); 应该管用。 当最小化或恢复时,它还提供了Windows的默认缩放功能。

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