当没有可用的可见表单时如何始终在任务栏中显示图标

How to show icon always in taskbar when there is no visible form available

我有一个没有任何任务栏图标的系统托盘应用程序。现在大多数系统托盘图标都是隐藏的,我想让应用程序更容易访问。

没有使用 Application.FormCreate 创建的表单,因此 Delphi 无法显示图标本身。

即使没有可用的可见表单,如何始终在任务栏上显示普通应用程序图标?

我想像这样捕捉点击并在点击时显示带有我的自定义功能的 GUI:

class procedure TTrayMain.HandleMessages(var Msg: TMsg; var Handled: Boolean);
begin

   if (Msg.wparam = SC_RESTORE ) then begin 
                 MenuPopup (popup,2);
                 Exit;
                 end;

如果没有 window 来表示,任务栏按钮就不可能存在。要创建的任务栏按钮有 only 3 ways 个:

  • 创建具有 WS_EX_APPWINDOW 样式的可见 window
  • 创建一个可见的 top-level 无主 window
  • 使用ITaskbarList::AddTab()

所有这些都需要 window。但是,这并不意味着 用户 必须看到 window。您可以创建一个可见的 window 并将 width/height 设置为 0(某些框架会这样做,因此没有单个应用程序 window 拥有任务栏按钮,但该按钮可以 show/hide 整个应用程序作为一个整体),或将其移出屏幕。然后 window 可以根据需要响应状态更改,例如通过任务栏按钮。

否则,由于您的任务栏应用可能有一个隐藏的 window 来接收图标通知,您可以尝试将 window 与 ITaskbarList 一起使用。我只是不知道当用户点击按钮时它是否真的会做任何有意义的事情。因此,考虑更改您的任务栏应用程序以使用可见但不可见的 window 进行通知,然后它可以有一个任务栏按钮而不涉及 ITaskbarList.