首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 隱藏應用程式於工作列:WS_EX_TOOLWINDOW 延伸視窗樣式應用

     編輯:Delphi

一行程式碼實現

procedure TForm1.FormCreate(Sender: TObject);
begin
  SetWindowLong(Application.Handle, GWL_EXSTYLE,
    GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
end;

原理解析

  • Application.Handle 為 VCL 應用程式隱藏視窗(TApplication 內部建立),系統以此視窗在工作列建立任務按鈕。
  • GWL_EXSTYLE 為延伸視窗樣式索引,WS_EX_TOOLWINDOW (0x00000080) 標記視窗為「工具視窗」:不在工作列顯示、不在 Alt+Tab 切換清單、標題列較小、無系統選單圖示。
  • SetWindowLong 修改樣式即時生效,無需重建視窗。

完整單元程式碼

unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;
type TForm1 = class(TForm)
  procedure FormCreate(Sender: TObject);
end;
var Form1: TForm1;
implementation {$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
  SetWindowLong(Application.Handle, GWL_EXSTYLE,
    GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
end;
end.

執行效果

工作列無圖示

適用場景與替代方案

場景推薦做法
背景服務/監控工具WS_EX_TOOLWINDOW + 系統托盤圖示
無介面 Console 應用編譯指令 {$APPTYPE CONSOLE} 或 IsConsole 判斷
需顯示主視窗但不佔工作列主視窗 FormStyle := fsStayOnTop + 隱藏 Application 任務鈕
現代 Windows (Vista+)ITaskbarList3.DeleteTab 精確控制任務列項目

注意事項

  1. 修改 Application.Handle 樣式會影響整個應用程式所有視窗的任務列行為。
  2. 若需主視窗正常顯示於任務列而隱藏特定對話框,請對該對話框視窗單獨設定 WS_EX_TOOLWINDOW。
  3. 部分殺毒/監控軟體會將隱藏任務列視為可疑行為,建議簽名發布並說明用途。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved