Есть ли способ проверить, работает ли другая программа в полноэкранном режиме?

Также как и вопрос. Могу ли я посмотреть, работает ли кто-то еще, программа, на весь экран?

Полноэкранный режим означает, что весь экран скрыт, возможно, работает в режиме видео, отличном от рабочего стола.

 Justin C19 сент. 2010 г., 02:05
Вы хотите знать, является ли программа, над которой вы осуществляете программный контроль, полноэкранной, или вы хотите узнать, работает ли другая программа в полноэкранном режиме?
 Jim Mischel19 сент. 2010 г., 03:56
связанные с:stackoverflow.com/questions/3536373/..., Такжеstackoverflow.com/questions/3686311/..., Я подозреваю, что последний ответит на ваш вопрос.

Ответы на вопрос(2)

Я сделал несколько модификаций. С кодом ниже он не возвращает ложно, когда панель задач скрыта или на втором экране. Проверено под Win 7.

    [StructLayout(LayoutKind.Sequential)]
    public struct RECT
    {
        public int left;
        public int top;
        public int right;
        public int bottom;
    }

    [DllImport("user32.dll", SetLastError = true)]
    public static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);

    [DllImport("user32.dll")]
    private static extern bool GetWindowRect(HandleRef hWnd, [In, Out] ref RECT rect);

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

    public static bool IsForegroundFullScreen()
    {
        return IsForegroundFullScreen(null);
    }


    public static bool IsForegroundFullScreen(System.Windows.Forms.Screen screen)
    {

        if (screen == null)
        {
            screen = System.Windows.Forms.Screen.PrimaryScreen;
        }
        RECT rect = new RECT();
        IntPtr hWnd = (IntPtr)GetForegroundWindow();


        GetWindowRect(new HandleRef(null, hWnd), ref rect);

        /* in case you want the process name:
        uint procId = 0;
        GetWindowThreadProcessId(hWnd, out procId);
        var proc = System.Diagnostics.Process.GetProcessById((int)procId);
        Console.WriteLine(proc.ProcessName);
        */


        if (screen.Bounds.Width == (rect.right - rect.left) && screen.Bounds.Height == (rect.bottom - rect.top))
        {
            Console.WriteLine("Fullscreen!")
            return true;
        }
        else {
            Console.WriteLine("Nope, :-(");
            return false;
        }


    }
Решение Вопроса

Вот код, который это делает. Вы хотите позаботиться о мультиэкранном корпусе, особенно с такими приложениями, как Powerpoint

    [StructLayout(LayoutKind.Sequential)]
    private struct RECT
    {
        public int left;
        public int top;
        public int right;
        public int bottom;
    }

    [DllImport("user32.dll")]
    private static extern bool GetWindowRect(HandleRef hWnd, [In, Out] ref RECT rect);

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

    public static bool IsForegroundFullScreen()
    {
        return IsForegroundFullScreen(null);
    }

    public static bool IsForegroundFullScreen(Screen screen)
    {
        if (screen == null)
        {
            screen = Screen.PrimaryScreen;
        }
        RECT rect = new RECT();
        GetWindowRect(new HandleRef(null, GetForegroundWindow()), ref rect);
        return new Rectangle(rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top).Contains(screen.Bounds); 
    }
 Cody Gray23 февр. 2016 г., 17:23
@erl Одним из возможных решений будет проверка окна переднего плана на отсутствие строки заголовка. Это единственная реальная разница между чем-то вроде слайд-шоу PowerPoint и максимизированного Блокнота.
 Simon Mourier18 июн. 2015 г., 10:15
Не знаю точно, что вы ищете, но вы можете заменитьscreen.Bounds отscreen.WorkingArea если вы хотите принять панель задач в учет.
 Erlend D.18 июн. 2015 г., 08:40
@ Ролл прав. Какие-нибудь решения для этого? Я предполагаю, что трудно отделить развернутый Блокнот, работающий на дополнительном экране (без панели задач), от полноэкранной презентации видео / игры / PowerPoint без учета каждого процесса.
 Rolle04 февр. 2014 г., 15:46
Если вы скрываете панель задач, это будет ложно сообщать о полноэкранном приложении
 Erlend D.23 июн. 2015 г., 13:08
Как писал @Rolle, этот метод будет ложно сообщать о полноэкранном приложении, если панель задач скрыта (как на дополнительных экранах в Windows 7 или более ранней версии). Мне просто интересно, есть ли какой-нибудь способ отделить развернутый блокнот (который ваш метод пометит как полноэкранное приложение, если панель задач скрыта) от «настоящих» полноэкранных приложений, таких как презентация PowerPoint, фильм или игра. Но я вполне уверен, что ответ - нет, между такими приложениями нет технической разницы, только воспринимаемые пользователем различия.

Ваш ответ на вопрос