如何在 运行 时从任务栏中隐藏我的任务栏图标?

How to hide my TaskBar icon from the TaskBar at run-time?

我已经从以下位置下载了 CoolTrayIcon v.4.4.0:

https://torry.net/files/vcl/system/trayicons/CoolTrayIcon.zip

安装完Delphi10.4.2的组件后,在demo文件夹中,我打开了项目“CoolTrayTest”。在这个项目中,我在按钮点击处理程序中执行了这段代码:

if IsWindowVisible(Application.Handle) then
  ShowWindow(Application.Handle, SW_HIDE);

这隐藏了任务栏图标。

但是当我在自己的 VCL 应用程序中尝试此代码时,任务栏图标并未隐藏。

如何让我自己的 VCL 应用程序也使用此代码隐藏任务栏图标? (我不想在程序启动时隐藏任务栏图标,而是故意点击一个按钮)。

编辑:按照雷米的建议,我使用了这段代码:

procedure TForm1.btnTestClick(Sender: TObject);
var
  T: System.Win.Taskbar.TWinTaskbar;
begin
  T := System.Win.Taskbar.TWinTaskbar.Create;
  try
    if not FTaskBarButtonIsHidden then
    begin
      IsOK := T.DeleteTab(Self.Handle);
      CodeSite.Send('TForm1.btnTestClick: DeleteTab', IsOK);
      FTaskBarButtonIsHidden := IsOK;
    end
    else
    begin
      IsOK := T.AddTab(Self.Handle);
      CodeSite.Send('TForm1.btnTestClick: AddTab', IsOK);
      FTaskBarButtonIsHidden := not IsOK;
    end;
  finally
    T.Free;
  end;
end;

似乎有效。这个有副作用吗?

Application.ShowMainFormOnTaskbar 属性 为 False 时,就像 CoolTrayIcon 演示中的情况一样,任务栏按钮由隐藏的 Application window.

ShowMainFormOnTaskbar 改为 True 时,就像现代 Delphi 项目中的默认情况一样,任务栏按钮由 Application.MainForm [=36] =] 而不是 Application window.

要 hide/show 任务栏按钮,您需要 hide/show 它的所有者 window。

或者,您可以使用 DeleteTab() and AddTab() methods of the Win32 ITaskbarList Shell 界面。

有关详细信息,请参阅有关 The Taskbar 的文档。特别是关于“管理任务栏按钮”和“修改任务栏内容”的部分。