如何从 ALT+TAB 隐藏应用程序而不是从任务栏(图标行)隐藏应用程序

How to hide App from ALT+TAB but not from the Taskbar (icon row)

我想从 ALT+TAB 隐藏我的应用程序而不是从任务栏; 任务栏现在有一个图标可以用来管理工具 GUI。

但是,不需要将应用程序放在 ALT-TAB 可浏览 window 列表中,因为应用程序的主要 window 实际上是隐藏的。

应用 Window 通过将其 ALPHA 设置为 0 来隐藏。

  1. 您必须将 Form.BorderStyle 设置为 bsSizeToolWinbsToolWindow,因此其 window 未在 Alt[=35 中列出=]+Tab 对话框.
  2. 您必须对 Application.Handle window 执行相同的操作:
    procedure TForm1.FormCreate( Sender: TObject );
    var
      iStyle: Integer;
    begin
      iStyle:= GetWindowLong( Application.Handle, GWL_EXSTYLE );
      SetWindowLong( Application.Handle, GWL_EXSTYLE, iStyle or WS_EX_TOOLWINDOW );
    end;
    
    步骤 #1 和 #2 按预期对我有效:window 列表中没有任何内容,任务栏上没有一个按钮。
  3. 根据 Remy 单独添加任务栏按钮 the interface promises to do so
    uses
      ComObj;
    
    // From https://github.com/project-jedi/jvcl/blob/master/jvcl/run/JvProgressBar.pas
    const
      CLSID_TaskbarList: TGUID= '{56FDF344-FD6D-11d0-958A-006097C9A090}';
    
    type
      ITaskbarList= interface(IUnknown)
        ['{56FDF342-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;
    
    var
      oBar: ITaskbarList= nil;
    
    procedure TForm1.Button1Click( Sender: TObject );
    begin
      if oBar= nil then begin  // Never used? Try to init.
        oBar:= CreateComObject( CLSID_TaskbarList ) as ITaskbarList;
        if oBar.HrInit<> S_OK then oBar:= nil;  // Failed? Can't use it.
      end;
      if oBar<> nil then begin
        if oBar.AddTab( self.Handle )= S_OK then self.Caption:= 'Success!';
      end;
    end;
    
    然而:这第三步在 Win7 上对我不起作用 - 没有按钮被添加到任务栏,尽管没有发生错误。可能是因为
    • 我禁用了样式,我的任务栏看起来像在 Win95 中,并且
    • T-Clock Redux 2.4.4正在操纵它。

我不鼓励整个方法:出现在 Alt+Tab 中的内容也应该有一个任务栏按钮,反之亦然。在工作中,有一个烦人的 NCP software,它会在成功连接后自动隐藏其 window,坚持使用任务托盘图标,并在我靠近任务图标时立即在 window 中使用 auto-slides ,虽然我肯定想打一个不同的。可怕,因为它总是挡路,也不能指望坚持下去。

这不是你想要的,但你也想强制不一致。干脆不要。只需发布一个可以使用并且预期行为也会发生的应用程序。如果所有这些都不打动你,那么想想你的应用程序将来在仿真中失败的可能性有多大——不要做不寻常的事情,Wine 将没有问题 运行 它适用于所有 Unix用户也是。