C#笨的全屏获取方式

本文介绍如何通过C#代码实现应用程序在Windows任务栏通知区的注册与取消注册过程,包括获取桌面窗口句柄、壳窗口句柄及窗口大小等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


        [DllImport("SHELL32", CallingConvention = CallingConvention.StdCall)]
        public static extern uint SHAppBarMessage(int dwMessage, ref APPBARDATA pData);
        [DllImport("User32.dll", CharSet = CharSet.Auto)]
        public static extern int RegisterWindowMessage(string msg);
        //取得Shell窗口句柄函数 
        [DllImport("user32.dll")]
        public static extern IntPtr GetShellWindow();
        //取得桌面窗口句柄函数 
        [DllImport("user32.dll")]
        public static extern IntPtr GetDesktopWindow();
        //取得窗口大小函数 
        [DllImport("user32.dll", SetLastError = true)]
        private static extern int GetWindowRect(IntPtr hwnd, out RECT rc);


        [StructLayout(LayoutKind.Sequential)]
        public struct RECT
        {
            public int left;
            public int top;
            public int right;
            public int bottom;
        }
        [StructLayout(LayoutKind.Sequential)]
        public struct APPBARDATA
        {
            public int cbSize;
            public IntPtr hWnd;
            public int uCallbackMessage;
            public int uEdge;
            public RECT rc;
            public IntPtr lParam;
        }
        public enum ABMsg : int
        {
            ABM_NEW = 0,
            ABM_REMOVE,
            ABM_QUERYPOS,
            ABM_SETPOS,
            ABM_GETSTATE,
            ABM_GETTASKBARPOS,
            ABM_ACTIVATE,
            ABM_GETAUTOHIDEBAR,
            ABM_SETAUTOHIDEBAR,
            ABM_WINDOWPOSCHANGED,
            ABM_SETSTATE
        }
     
        bool RunningFullScreenApp;
        private IntPtr desktopHandle;
        private IntPtr shellHandle;
        int uCallBackMsg;


        public void RegisterAppBar(bool registered)
        {
            APPBARDATA abd = new APPBARDATA();
            abd.cbSize = Marshal.SizeOf(abd);
            abd.hWnd = this.Handle;


            desktopHandle = MyScreenSaver.GetDesktopWindow();
            shellHandle = MyScreenSaver.GetShellWindow();
            if (!registered)
            {
                //register
                uCallBackMsg = MyScreenSaver.RegisterWindowMessage("APPBARMSG_优快云_HELPER");
                abd.uCallbackMessage = uCallBackMsg;
                uint ret = MyScreenSaver.SHAppBarMessage((int)ABMsg.ABM_NEW, ref abd);
            }
            else
            {
                MyScreenSaver.SHAppBarMessage((int)ABMsg.ABM_REMOVE, ref abd);
            }
        }

        //重载窗口消息处理函数
        protected override void WndProc(ref System.Windows.Forms.Message m)
        {
            //屏幕大小
            Rectangle rect = Screen.PrimaryScreen.Bounds;
            RunningFullScreenApp = false;
            foreach (Process p in Process.GetProcesses())
            {
                //找到想要的进程
                /*if (p.ProcessName == "POWERPNT")
                {
                }*/
                GetWindowRect(p.MainWindowHandle, out RECT appBounds);
               //比较
         if ((appBounds.right - appBounds.left) >= rect.Width && (appBounds.bottom - appBounds.top) >= rect.Height)
                                {
                  //to do,这种情况肯定已经是全屏了
                  RunningFullScreenApp = true;
               }
            }
            base.WndProc(ref m);

        }


用的时候调用

RegisterAppBar(false)

不用的时候调用

RegisterAppBar(true)


参考:https://blog.youkuaiyun.com/jingzhongrong/article/details/5385951


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值