例如,用户是全屏播放电影,还是以全屏模式观看powerpoint?
我可以发誓我之前看过IsFullScreenInteractive API,但现在找不到它
答案 0 :(得分:4)
以下是我解决这个问题的方法:
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);
}
}
}
答案 1 :(得分:3)
Vista确实有一个API用于此目的 - 它被称为SHQueryUserNotificationState。
答案 2 :(得分:2)
使用GetForegroundWindow获取用户正在使用的窗口的句柄。 GetClientRect将给出窗口的活动部分的尺寸sans border;使用ClientToScreen将矩形转换为监视器坐标。
调用MonitorFromRect或MonitorFromWindow以获取窗口所在的监视器。使用GetMonitorInfo获取监视器的坐标。
比较两个矩形 - 如果窗口矩形完全覆盖监视器矩形,则它是一个全屏窗口。
答案 3 :(得分:0)
检测窗口状态的首选方法是调用GetWindowPlacement。如果您与GetForegroundWindow一起使用,您可以轻松检查用户是否看到全屏窗口。