我想在ALT+TAB中隐藏我的应用程序,但不想在任务栏中隐藏;任务栏现在有一个可以用来管理工具GUI的图标。
然而,由于应用程序的主窗口实际上是隐藏的,因此不需要将应用程序放在ALT-TAB可浏览窗口列表中。
应用程序窗口通过将其ALPHA设置为0而隐藏。
- 您必须将
Form.BorderStyle
设置为bsSizeToolWin
或bsToolWindow
,因此其窗口不会在Alt+选项卡对话框中列出 - 您必须对
Application.Handle
窗口执行相同操作:
步骤#1和#2对我来说如预期的那样有效:窗口列表中没有任何内容,任务栏上没有一个按钮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;
- 根据雷米单独添加任务栏按钮的说法,界面承诺会这样做:
然而:这第三步在Win7上对我不起作用——任务栏上没有添加任何按钮,尽管没有出现任何错误。可能是因为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;
- 我禁用了样式,我的任务栏看起来像Win95,并且
- T-Clock Redux 2.4.4正在操纵它
我不赞成这种整个方法:Alt+选项卡中出现的内容也应该有任务栏按钮,反之亦然。在工作中,有一个烦人的NCP软件,它在成功连接后自动隐藏窗口,坚持使用任务栏图标,并在我靠近任务图标时自动在窗口中滑动,尽管我肯定想换一个。可怕的是,因为它总是挡道,也不能依靠它来坚持下去。
这不是你想要的,但你也想强迫不一致。干脆不要。只需发布一个可以使用的应用程序,以及预期行为发生的位置。如果所有这些都没有改变你,那么想想你的应用程序在未来的模拟中会有多容易失败——不要做不寻常的事情,Wine也不会为所有Unix用户运行它。