Есть ли способ обнаружить и сохранить местоположение и размер всех открытых окон, а также их состояние (Минимизированный, Максимизируемый и т.д.)
Я никогда не разрабатывал ничего, что получает информацию от фактической операционной системы таким образом. Это требует вызова к Windows API и включает неуправляемый код?
Если это не ясно, прокомментируйте, и я попытаюсь уточнить.
Вызов EnumWindows , чтобы просмотреть все окна, затем вызвать GetWindowPlacement , чтобы получить информацию. Для этого потребуется PInvoke для Windows API, но это не так сложно, просто вы можете найти всю информацию на сайте PInvoke .
Кстати, вот статья codeproject для поиска определенного окна и получения / настройки его состояния отображения, может быть хорошей отправной точкой (код находится в VB.Net, но вы, вероятно, могли бы просто используйте один из онлайн-конвертеров VB.Net в C #, если вы не знаете VB.Net)
Класс System.Diagnostics.Process предоставляет большую часть необходимой информации. Вы можете попробовать это.
Process[] currentProcesses = Process.GetProcesses();
Console.WriteLine("MainWindowTitle: {0}",currentProcesses[0].MainWindowTitle);
Console.WriteLine(currentProcesses[0].StartInfo.WindowStyle);
Я не уверен, предоставляет ли он все, что вам нужно. Но класс Process может предоставить так много информации о запущенных в данный момент процессах. Прежде чем переходить к API, полезно взглянуть на класс Process.
Да, вы начнете с EnumWindows: http://msdn.microsoft.com/en-us/library/ms633497.aspx
См. Список оконных функций, чтобы узнать о методах получения доступа к нужной информации: http://msdn.microsoft.com/en-us/library/ff468919.aspx