Получить местоположение и размер всех открытых окон с помощью .NET(С#)

Есть ли способ обнаружить и сохранить местоположение и размер всех открытых окон, а также их состояние (Минимизировано, Максимизировано и т.д.)

Я никогда не разрабатывал ничего, что получало бы информацию от реальной операционной системы таким образом. Требуется ли вызов для Windows API и включать неуправляемый код?

Если это неясно, прокомментируйте и я попытаюсь уточнить.

Ответ 1

Вызовите EnumWindows, чтобы просмотреть все окна, затем вызовите GetWindowPlacement, чтобы получить информацию. Это потребует PInvoke для Windows API, но это не так сложно, просто можно найти всю информацию на сайте PInvoke.

Btw, здесь codeproject статья для поиска конкретного окна и получения/установки состояния отображения, может быть хорошим началом (код находится в VB.Net, но вы, возможно, просто используете один из онлайн-конвертеров VB.Net для С#, если вы не знаете VB.Net)

Ответ 3

Класс System.Diagnostics.Process получает большую часть необходимой вам информации. Вы можете попробовать это.

        Process[] currentProcesses = Process.GetProcesses();           
        Console.WriteLine("MainWindowTitle: {0}",currentProcesses[0].MainWindowTitle);
        Console.WriteLine(currentProcesses[0].StartInfo.WindowStyle);

Я не уверен, что он предоставляет все, что вам нужно. Но класс Process способен предоставлять столько информации о текущих запущенных процессах. Хорошо переходить к классу Process, прежде чем переходить к API.