首页 > 编程语言 >桌面窗体工具类库 - C#小函数类推荐

桌面窗体工具类库 - C#小函数类推荐

时间:2024-08-27 09:25:33浏览次数:8  
标签:类库 IntPtr 桌面 C# private static bool 窗体

       此文记录的是检测桌面窗体的小函数。

/***

    桌面窗体工具类库

    Austin Liu 刘恒辉
    Project Manager and Software Designer

    E-Mail: [email protected]
    Blog:   http://lzhdim.cnblogs.com
    Date:   2024-01-15 15:18:00

    说明:
        用于判断桌面是否有窗体显示,桌面是否被遮挡的判断。

    使用方法:
        bool _Index = DesktopWindowUtil.IsHaveShowWindow();
        bool _Index = DesktopWindowUtil.IsDesktopCovered();

***/

namespace Lzhdim.LPF.Utility
{
    using System;
    using System.Collections.Generic;
    using System.Runtime.InteropServices;

    /// <summary>
    /// 桌面窗体工具类
    /// </summary>
    public class DesktopWindowUtil
    {
        #region 判断桌面是否显示了窗体

        private const int GWL_STYLE = -16;

        private const int WS_VISIBLE = 262144;

        /// <summary>
        /// 判断桌面是否显示了窗体
        /// </summary>
        /// <returns>true 桌面有窗体显示;false 桌面没窗体显示;</returns>
        public static bool IsHaveShowWindow()
        {
            IntPtr hWnd = GetForegroundWindow();

            bool isVisible = IsWindowVisible(hWnd); // 检查窗体是否可见
            int style = GetWindowLong(hWnd, GWL_STYLE); // 获取窗体样式
            bool isNotMinimized = (style & WS_VISIBLE) == WS_VISIBLE; // 检查窗体是否最小化

            if (isVisible && isNotMinimized)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        [DllImport("user32.dll")]
        private static extern IntPtr GetForegroundWindow();

        [DllImport("user32.dll")]
        private static extern int GetWindowLong(IntPtr hWnd, int nIndex);

        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        private static extern bool IsWindowVisible(IntPtr hWnd);

        #endregion 判断桌面是否显示了窗体

        #region 判断桌面是否被遮挡

        /// <summary>
        /// 判断桌面是否被覆盖
        /// </summary>
        /// <returns></returns>
        public static bool IsDesktopCovered()
        {
            List<IntPtr> handles = GetAllWindowHandles();

            foreach (IntPtr handle in handles)
            {
                bool isVisible = IsWindowVisible(handle); // 检查窗体是否可见
                int style = GetWindowLong(handle, GWL_STYLE); // 获取窗体样式
                bool isNotMinimized = (style & WS_VISIBLE) == WS_VISIBLE; // 检查窗体是否最小化

                //只要有一个窗体为最大化,而且已经显示并且不是最小化,则认为桌面有窗体被遮挡
                if (IsZoomed(handle) && isVisible && isNotMinimized)
                {
                    return true;
                }
            }

            return false;
        }

        #region 私有方法

        private static List<IntPtr> windowHandles = new List<IntPtr>();

        private delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam);

        private static bool EnumTheWindows(IntPtr hWnd, IntPtr lParam)
        {
            // 将窗口句柄添加到列表中
            windowHandles.Add(hWnd);

            // 继续枚举其他窗口
            return true;
        }

        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        private static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, IntPtr lParam);

        private static List<IntPtr> GetAllWindowHandles()

        {
            // 清除之前的句柄列表(如果需要)

            windowHandles.Clear();

            // 枚举所有顶级窗口

            EnumWindows(new EnumWindowsProc(EnumTheWindows), IntPtr.Zero);

            // 返回找到的窗口句柄列表

            return windowHandles;
        }

        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        private static extern bool IsZoomed(IntPtr hWnd);

        #endregion 私有方法

        #endregion 判断桌面是否被遮挡
    }
}

 

标签:类库,IntPtr,桌面,C#,private,static,bool,窗体
From: https://www.cnblogs.com/lzhdim/p/18325733

相关文章

  • 学习C++的阶段总结
    每日诗词:盛气光引炉烟,素草寒生玉佩。应是天仙狂醉,乱把白云揉碎。                        ——《清平乐·画堂晨起》【唐】李白目录月末学习总结展望和感谢通知我的目标是:共同进步下期预告:搞定C++指针;更新时间:待定......
  • Pytorch:torch.diag()创建对角线张量方式例子解析
    在PyTorch中,torch.diag函数可以用于创建对角线张量或提取给定矩阵的对角线元素。以下是一些详细的使用例子:创建对角矩阵:如果输入是一个向量(1D张量),torch.diag将返回一个2D方阵,其中输入向量的元素作为对角线元素。例如:a=torch.randn(3)print(a)#输出:tensor([0.5950,......
  • 解决torch.to(device)是否赋值的坑例子解析
    在PyTorch中使用torch.to(device)方法将Tensor或模型移动到指定设备(如GPU)时,确实存在一些常见的问题和注意事项。以下是一些详细的使用示例和解释:Tensor的.to(device)使用:当你有一个Tensor并希望将其移动到GPU上时,你需要使用.to(device)方法并赋值给新的变量,因为.to(devi......
  • 链表-单链表的基本操作及C语言代码实现
    1.遍历单链表(打印,修改)便利的概念想必大家都不会陌生,即就是从链表的头开始,逐步向后进行每一个元素的访问,这就是遍历,对于遍历操作,我们可以衍生出很多常用的数据操作,比如说查询元素,修改元素,获取元素个数,打印整个链表数据等等。进行遍历的思路极其简单,只需要建立一个指向链表L的......
  • 链表-双向链表的基本设计(C语言代码实现)
    1.双向链表的简介&概念单链表在很多时候已经可以胜任很多优秀的操作了,但是,单链表任然存在不足,所谓‘单链表’,是指结点中只有一个指向其后继的指针,具有单向性,有时需要搜索大量数据的时候,就必须要多次进行从头开始的遍历,这样的搜索不是很便利。图:单链表示意图对此在单链表的......
  • A review of ssm and their applications in connectedand automated vehicles safety
    ABSTRACTSurrogateSafetyMeasures(SSM)areimportantforsafetyperformanceevaluation,since crashesarerareeventsandhistoricalcrashdatadoesnotcapturenearcrashesthatarealsocriticalforimprovingsafety.Thispaper focusesonSSMandthei......
  • 网络安全实训六(靶机实例DC-3)
    1信息收集1.1获取靶机IP1.2扫描靶机网站的目录1.3扫描端口和服务器信息1.4进入网站1.5在msf中给搜索joomla扫描器1.6设置参数查看joomla版本信息1.7按照版本号搜索漏洞1.8查看漏洞使用2渗透2.1查看是否存在SQL注入2.2获取到数据库......
  • json格式化com.alibaba.fastjson.JSONException: not match : - =, info :错误
    com.alibaba.fastjson.JSONException:notmatch:-=,info:pos6,line1,column7{intro=全刚的大铁锤,name=巨大铁锤,stock=666}   atcom.alibaba.fastjson.parser.JSONLexerBase.nextTokenWithChar(JSONLexerBase.java:398)   atcom.alibaba.fastjson.......
  • 零基础学习人工智能—Python—Pytorch学习(九)
    前言本文主要介绍卷积神经网络的使用的下半部分。另外,上篇文章增加了一点代码注释,主要是解释(w-f+2p)/s+1这个公式的使用。所以,要是这篇文章的代码看不太懂,可以翻一下上篇文章。代码实现之前,我们已经学习了概念,在结合我们以前学习的知识,我们可以直接阅读下面代码了。代码里使......
  • BatchNorm & LayerNorm
    BatchNorm&LayerNorm目录BatchNorm&LayerNormBatchNorm过程LayerNormNormalization作用:1.缓解内部协变量偏移。在深度神经网络中,随着网络层数的加深,每一层的参数更新都可能导致后续层的输入分布发生变化,这种现象被称为内部协变量偏移(InternalCovariateShift,ICS)。ICS......