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);

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

所以,可以筛选出那些以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# 显示、隐藏窗口对应的任务栏的文章就介绍到这了,更多相关C# 显示隐藏窗口任务栏内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C#实现任务栏通知窗口

    想必大部分网友都使用过QQ.MSN等聊天程序,它们的界面都相当华丽,尤其是当网友上线以及消息提示时会有一个浮动的窗体从屏幕的右下方缓慢升起,既美观又人性化.本文主要讲解用C#来实现任务栏通知窗口. 简介 QQ和MSN的任务栏通知窗口很人性化,它可以在不丢失主窗体焦点的前提下显示一个具备皮肤Skin的通知窗体,当它显示一段时间后会自动消失,所以用户根本不用干预它. 这样的通知窗体和一般的具备标题栏.系统图标和按钮的窗体没有太大的区别,窗体表面其实就是画上去的一张位图而已,而窗体的浮动则会复杂一点,

  • c#实现隐藏与显示任务栏的方法详解

    1.导入System.Runtime.InteropServices命名空间. 2.API函数ShowWindow()能够控制人和窗体的现实状态,其声明格式如下: 复制代码 代码如下: [DllImport("user32.dll")]public static extern int ShowWindow(int hwnd,int nCmdShow); 其中hwnd表示窗体的句柄,nCmdShow表示窗体的现实状态. 3.API函数FindWindow()可用于返回任务栏所在窗体类&q

  • C# 显示、隐藏窗口对应的任务栏

    WPF中全屏窗口,会自动隐藏任务栏. 那非全屏窗口如何隐藏任务栏?甚至有没有一种场景,隐藏任务后自定义一套系统任务栏来显示? 以下会分阶段讲述一些概念,任务栏.查找窗口.控制窗口显示. 1. 主屏任务栏 任务栏,其实也是一个窗口,主屏的任务栏名称是"Shell_TrayWnd". 所以可以通过名称查找窗口,然后对窗口进行显示.隐藏操作. 以下是主屏幕任务栏的控制操作: public static class ScreenTaskBar { private const int SwHid

  • JS实现随页面滚动显示/隐藏窗口固定位置元素

    窗口固定位置显示元素,当页面高度大于某高度,并且页面向下滚动时,显示该元素:当页面位置小于某高度,或者页面向上滚动时,隐藏该元素. 先给大家展示下效果图: 1.html <p id="selected-case-count"><span class='form-control'>已选: <span class="casecount">0</span></span></p> 2.css p#sel

  • Electron应用显示隐藏时展示动画效果实例

    目录 最终效果 实现思路 实现过程 总结 最终效果 实现思路 窗口设置透明 建立系统托盘 获取托盘坐标,实现应用在托盘上方出现 CSS 里面写上加载和退出的动画 添加加载动画的事件,即给元素套上动画 设置单击事件,单击显示或者隐藏程序(或者添加 blur 事件,隐藏应用) 给托盘添加右键菜单退出应用 实现过程 窗口设置透明 const win = new BrowserWindow({ width: 300, height: 400, frame: false, // 窗口边框 skipTask

  • Android软键盘的显示隐藏功能实现过程

    一.软键盘显示的原理 软件盘的本质是什么?软键盘其实是一个Dialog! InputMethodService为我们的输入法创建了一个Dialog,并且将该Dialog的Window的某些参数(如Gravity)进行了设置,使之能够在底部或者全屏显示.当我们点击输入框时,系统对活动主窗口进行调整,从而为输入法腾出相应的空间,然后将该Dialog显示在底部,或者全屏显示. 二.活动主窗口调整 android定义了一个属性,名字为windowSoftInputMode, 用它可以让程序可以控制活动主

  • Android虚拟导航键的显示隐藏实例

    代码如下: package test.lb.com.myapplication; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends Activity implements View.OnClickListener{ boolean isnight = fals

  • Android 弹出Dialog时隐藏状态栏和底部导航栏的方法

    上代码 dialog.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); dialog.getWindow().getDecorView().setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() { @Override public void onSystemUi

  • 运行bat时隐藏cmd窗口的方法(bat隐藏窗口 隐藏运行bat文件)

    这里我们简单的整理下常用方法,方便大家使用.都是通过vbscript的代码.运行bat时隐藏cmd窗口的方法 可以编辑一个vbs脚本,在其中以隐藏窗口运行批处理程序. 复制代码 代码如下: Set ws = CreateObject("Wscript.Shell") ws.run "cmd /c 批处理程序名",vbhide 将上面代码拷贝到记事本中,保存为"runbat.vbs"或者其它的名字(扩展名必须是.vbs),然后点击运行生成的脚本ru

  • 基于jquery实现页面滚动时顶部导航显示隐藏

    本文实例讲述了jquery实现页面滚动时顶部导航显示隐藏效果代码.分享给大家供大家参考.具体如下: 运行效果截图如下: 具体代码如下: 引入核心文件 <script src="js/jquery/1.11.1/jquery.min.js"></script> 构建html,margint这个div中为了出现滚动条而建,并无实际作用. <div class="top-title">这是顶部导航条</div> <di

  • jQuery实现鼠标悬停显示提示信息窗口的方法

    本文实例讲述了jQuery实现鼠标悬停显示提示信息窗口的方法.分享给大家供大家参考.具体实现方法如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"

  • javascript 控制 html元素 显示/隐藏实现代码

    1.编写js函数 <script type="text/javascript"> function display(y){$(y).style.display=($(y).style.display=="none")?"":"none";} function $(s){return document.getElementById(s);} </script> 2. 要显示/隐藏的html元素加上 id

随机推荐