Is there an API for vista to detect if the desktop is running full screen?

后端 未结 4 1727
爱一瞬间的悲伤
爱一瞬间的悲伤 2021-02-10 15:21

e.g, Is the user playing a movie full screen, or looking at powerpoint in full screen mode?

I could have sworn I saw a IsFullScreenInteractive API before, but can\'t fin

4条回答
  •  借酒劲吻你
    2021-02-10 15:58

    Here's how I've solved this problem:

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Diagnostics;
    using System.Runtime.InteropServices;
    
    namespace Test
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine(IsForegroundWwindowFullScreen());
            }
    
            [DllImport("user32.dll")]
            static extern IntPtr GetForegroundWindow();
    
            [DllImport("user32.dll")]
            static extern int GetSystemMetrics(int smIndex);
    
            public const int SM_CXSCREEN = 0;
            public const int SM_CYSCREEN = 1;
    
            [DllImport("user32.dll")]
            [return: MarshalAs(UnmanagedType.Bool)]
            static extern bool GetWindowRect(IntPtr hWnd, out W32RECT lpRect);
    
            [StructLayout(LayoutKind.Sequential)]
            public struct W32RECT
            {
                public int Left;
                public int Top;
                public int Right;
                public int Bottom;
            }
    
            public static bool IsForegroundWwindowFullScreen()
            {
                int scrX = GetSystemMetrics(SM_CXSCREEN),
                    scrY = GetSystemMetrics(SM_CYSCREEN);
    
                IntPtr handle = GetForegroundWindow();
                if (handle == IntPtr.Zero) return false;
    
                W32RECT wRect;
                if (!GetWindowRect(handle, out wRect)) return false;
    
                return scrX == (wRect.Right - wRect.Left) && scrY == (wRect.Bottom - wRect.Top);
            }
        }
    }
    

提交回复
热议问题