千家信息网

如何实现用C#显示或隐藏窗口对应的任务栏

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,本篇内容介绍了"如何实现用C#显示或隐藏窗口对应的任务栏"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成
千家信息网最后更新 2025年01月19日如何实现用C#显示或隐藏窗口对应的任务栏

本篇内容介绍了"如何实现用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);        ///         /// 显示任务栏        ///         public static void Show()        {            ShowWindow(FindWindow("Shell_TrayWnd", null), SwRestore);        }        ///         /// 隐藏任务栏        ///         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);

以下是部分遍历出来的窗口类信息:

所以,可以筛选出那些以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;//还原窗口    ///     /// 通过句柄,窗体显示函数    ///     /// 窗体句柄    /// 显示方式    /// 返回成功与否    [DllImport("user32.dll", EntryPoint = "ShowWindowAsync", SetLastError = true)]    public static extern bool ShowWindow(IntPtr hWnd, int cmdShow);

这里的ShowWindow,与上面默认任务栏操作所调用的ShowWindow不一样,句柄参数是IntPtr

"如何实现用C#显示或隐藏窗口对应的任务栏"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

任务 屏幕 句柄 信息 函数 控制 C# 代码 内容 参数 可以通过 名称 场景 多屏 就是 所在 更多 知识 窗体 选出 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 南京构建智慧消防软件开发 网络安全不可否认性算法 天气预报服务器原理 金山区智能化软件开发定制报价表 软件开发外包一般多少钱 数据库安全性与完整性控制 软件开发能力小结 山东浪潮服务器维修调试多少钱 互联网科技精英 c 串口服务器 西双版纳锐致网络技术有限公司 铜仁网络安全系统怎么选 四川联想服务器续保一年多少钱 学网络技术吃香吗 怎么样用数据库做测试 电子图书 数据库 微信银行卡空卡网络安全 搭建免费iptv服务器教程 网站无法访问未连接服务器 山东祥亿网络技术有限公司 软件开发需要代码 兴化多功能网络技术价格表格 达梦数据库默认访问端口 数据库中查找相同元组的运算 软件开发 需求文档 滨海新区电子网络技术创造辉煌 ps5战争雷霆服务器不兼容 西安网络安全周主题 南京网易久网络技术有限公司 lol服务器为啥老蹦
0