SystemTray時按Alt+Tab Form不顯示在Taskbar裡

Csharp裡撰寫SystemTray程式時,可能會遇到執行時,在工作列或是按Alt+Tab時,表單Form還是可以被選取到,工作列不顯示,可以設定屬性ShowInTaskBar=false及WindowState=Minimized應該就可以解決了,不過按下Alt+Tab快速切換時,Form還是會被選取到的。

SystemTray

被選到後就一直存在著,讓人很困擾。

SystemTray2

解決方法:只需要在表單程式宣告區加上下面程式SystemTray.Designer.cs

        [DllImport("user32.dll")]
        public static extern int SetWindowLong(IntPtr window, int index, int
        value);
        [DllImport("user32.dll")]
        public static extern int GetWindowLong(IntPtr window, int index);


        const int GWL_EXSTYLE = -20;
        const int WS_EX_TOOLWINDOW = 0x00000080;
        const int WS_EX_APPWINDOW = 0x00040000;

在InitializeComponent function裡加上

            //Make it gone frmo the ALT+TAB
            int windowStyle = GetWindowLong(Handle, GWL_EXSTYLE);
            SetWindowLong(Handle, GWL_EXSTYLE, windowStyle | WS_EX_TOOLWINDOW);

參考資料Best way to hide a window from the Alt-Tab program switcher?

ps.在加入InitializeComponent function GUI的編輯可能無法使用,可以在開發時先mark掉,要建置時再加入就好了。

屬性部份如下圖:

SystemTray3

3 thoughts to “SystemTray時按Alt+Tab Form不顯示在Taskbar裡”

  1. 我希望版大能教我android如何寫
    一開始想先請版大能教我做兩個簡單的程式
    對於生活上有幫助的
    像是一個簡易的帳本
    輸入今天為了什麼而花多少錢
    而身上剩餘多少

    或者是一個計算熱量的程式
    輸入今天吃下的食物的熱量
    如果要消耗掉這些熱量可能要運動多久
    顯示出一些常見的運動每小時所消耗的熱量

    真的非常希望版大能指導一下
    感激不盡

Kyan 發表迴響取消回覆