Delphi下让窗口不显示在任务栏的另类方法

刚才看到了这篇东西《使窗口不在任务栏上显示(利用ITaskbarList接口)》,作者用ITaskList接口实现了隐藏窗口在任务栏按钮的功能,想起我好多年以前做的程序也有这样的功能,但是绝不是用这些接口之类的做的,只是一个API函数就搞定了(好像是SetWindowLong()中传个什么参数吧,真的想不起来了),可惜程序实在是找不到了,当然ITaskbarList的功能要稍许比以前的那个API强一些。觉得挺好玩,就用Delphi重新实现了一遍,把代码贴出来,以便今后做什么程序的时候还可以用。

uses
    ..., ActiveX;
    
type
  ITaskbarList = interface(IUnknown)
    ['{56FDF344-FD6D-11d0-958A-006097C9A090}']
    function HrInit():HRESULT;stdcall;
    function AddTab(hwnd:HWND):HRESULT;stdcall;
    function DeleteTab(hwnd:HWND):HRESULT;stdcall;
    function ActivateTab(hwnd:HWND):HRESULT;stdcall;
    function SetActiveAlt(hwnd:HWND):HRESULT;stdcall;
  end;

procedure TForm1.Button1Click(Sender: TObject);
var
  hr:HResult;
  TaskbarList:ITaskbarList;
const
  CLSID_TaskbarList:TGUID='{56FDF344-FD6D-11d0-958A-006097C9A090}';
  IID_ITaskbarList:TGUID='{602D4995-B13A-429b-A66E-1935E44F4317}';
begin
  hr:=CoCreateInstance(CLSID_TaskbarList,Nil,CLSCTX_INPROC_SERVER,
    IID_ITaskbarList,TaskbarList);
  TaskbarList.HrInit();
  TaskbarList.DeleteTab(Application.Handle);
end;

这样就可以隐藏Application在Taskbar上的按钮了,但是由于Delphi自己在Taskbar的消息上做了很多处理,所以一旦把主窗口最小化,那个被删除的按钮就又出来了,不太理想。

原文地址:https://www.cnblogs.com/MaxWoods/p/3171969.html