中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何實現用C#顯示或隱藏窗口對應的任務欄

發布時間:2021-10-08 09:55:09 來源:億速云 閱讀:250 作者:iii 欄目:開發技術

本篇內容介紹了“如何實現用C#顯示或隱藏窗口對應的任務欄”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

WPF中全屏窗口,會自動隱藏任務欄。

那非全屏窗口如何隱藏任務欄?甚至有沒有一種場景,隱藏任務后自定義一套系統任務欄來顯示?

以下會分階段講述一些概念,任務欄、查找窗口、控制窗口顯示。

1. 主屏任務欄

任務欄,其實也是一個窗口,主屏的任務欄名稱是"Shell_TrayWnd"。

所以可以通過名稱查找窗口,然后對窗口進行顯示、隱藏操作。

以下是主屏幕任務欄的控制操作:

public static class ScreenTaskBar
    {
        private const int SwHide = 0; //隱藏窗口
        private const int SwRestore = 9;//還原窗口

        [DllImport("user32.dll")]
        private static extern int ShowWindow(int hwnd, int nCmdShow);
        [DllImport("user32.dll")]
        private static extern int FindWindow(string lpClassName, string lpWindowName);
        /// <summary>
        /// 顯示任務欄
        /// </summary>
        public static void Show()
        {
            ShowWindow(FindWindow("Shell_TrayWnd", null), SwRestore);
        }
        /// <summary>
        /// 隱藏任務欄
        /// </summary>
        public static void Hide()
        {
            ShowWindow(FindWindow("Shell_TrayWnd", null), SwHide);
        }
    }

2.多屏任務欄

如果是多屏,對任務欄進行處理的場景,一般是對窗口所對應的任務欄操作。

如何獲取任意窗口所在的任務欄呢?既然任務欄也是窗口,那么我們的關注點就是如何找到任務欄窗口了。

User32有EnumWindows函數,可以遍歷當前電腦的所有窗口。

 private delegate bool EnumWindowProc(IntPtr hWnd, int lParam);
     [DllImport("user32")]
    private static extern bool EnumWindows(EnumWindowProc lpEnumFunc, int lParam);

EnumWindowProc定義了委托的處理。添加回調方法,返回的參數是句柄信息:

bool OnEnumWindow(IntPtr hWnd, int lparam)
     {
        //添加代碼XXX
         return true;
     }

然后可以在回調內部添加代碼,根據窗口的句柄信息,我們去拿窗口的一些信息,類名、窗口標題、窗口的Bounds(位置、大小)

[DllImport("user32")]
    private static extern int GetClassName(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
    [DllImport("user32")]
    private static extern int GetWindowText(IntPtr hWnd, StringBuilder lptrString, int nMaxCount);
    [DllImport("user32")]
    private static extern bool GetWindowRect(IntPtr hWnd, ref LPRECT rect);

以下是部分遍歷出來的窗口類信息:

如何實現用C#顯示或隱藏窗口對應的任務欄

所以,可以篩選出那些以TrayWnd字符串結尾的,這些都是任務欄窗口。

之后就是如何篩選出我們想要的任務欄,即窗口對應的任務欄。

窗口與任務欄,是通過屏幕關聯在一起的。通過窗口獲取當前屏幕信息,任務欄的Bounds如果與屏幕Bounds相交,則說明此任務欄在此屏幕內。

 var intPtr = new WindowInteropHelper(window).Handle;//獲取當前窗口的句柄
     var screen = Screen.FromHandle(intPtr);//獲取當前屏幕
     var currentScreenBounds = screen.Bounds;
     var taskBars = windows.Where(i => i.ClassName.Contains("TrayWnd"));
     var currentTaskBar = taskBars.FirstOrDefault(i => i.Bounds.IntersectsWith(currentScreenBounds));

獲取任務欄,也可以通過任務欄的句柄獲取屏幕,與主窗口所在屏幕判斷是否同一個。

獲取了指定的任務欄信息后,我們就可以控制任務欄顯示、隱藏了。調用下user32下函數ShowWindow即可:

private const int SwHide = 0; //隱藏窗口
    private const int SwRestore = 9;//還原窗口
    /// <summary>
    /// 通過句柄,窗體顯示函數
    /// </summary>
    /// <param name="hWnd">窗體句柄</param>
    /// <param name="cmdShow">顯示方式</param>
    /// <returns>返回成功與否</returns>
    [DllImport("user32.dll", EntryPoint = "ShowWindowAsync", SetLastError = true)]
    public static extern bool ShowWindow(IntPtr hWnd, int cmdShow);

這里的ShowWindow,與上面默認任務欄操作所調用的ShowWindow不一樣,句柄參數是IntPtr

“如何實現用C#顯示或隱藏窗口對應的任務欄”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兴山县| 浙江省| 四子王旗| 钟山县| 德格县| 从化市| 静乐县| 布拖县| 珲春市| 高密市| 扎兰屯市| 会理县| 灵璧县| 乐山市| 阿鲁科尔沁旗| 日喀则市| 托里县| 泰兴市| 项城市| 疏勒县| 清涧县| 赞皇县| 南涧| 卓资县| 娄烦县| 松原市| 喀喇沁旗| 垦利县| 威海市| 大庆市| 建平县| 阿图什市| 定西市| 冷水江市| 万年县| 孟连| 大足县| 绩溪县| 乌兰察布市| 海盐县| 沾益县|