Получить список открытых окон C # - PullRequest
6 голосов
/ 15 декабря 2010

Во время установки любого приложения. Обычно пользователя просили закрыть все окна перед началом установки. если нет, то установка остановится на середине и попросите пользователя закрыть все открытые окна. Меня попросили добавить код в приложение XXX. Когда приложение работает, и если пользователь открыл любое другое окно (например: Explore, browser, word и т.д ..) тогда приложение должно выбросить окно, сообщив, что вы открыли список окон. Я прошу вас предложить мне, как начать в C #.

Ответы [ 4 ]

7 голосов
/ 15 декабря 2010

Проверьте это:

var openWindowProcesses = System.Diagnostics.Process.GetProcesses()
   .Where(p => p.MainWindowHandle != IntPtr.Zero && p.ProcessName != "explorer");

openWindowProcesses должен содержать все открытые приложения, для которых у них есть активное главное окно.

Я помещаю p.ProcessName != "explorer" в выражение where, потому что проводникявляется основным процессом рабочего стола, и его никогда не следует закрывать.

Для наблюдения за выполнением процессов вы можете использовать класс ManagementEventWatcher.Смотрите это пожалуйста.

1 голос
/ 15 декабря 2010

Настройте цикл foreach как этот, чтобы перечислять все открытые приложения в вашей системе (которые имеют видимое главное окно)

foreach (var process in Process.GetProcesses().Where( p => p.MainWindowHandle != IntPtr.Zero)) {
    //do something with the process here. To display it's name, use process.MainWindowTitle
  }
1 голос
/ 15 декабря 2010

Вы можете использовать класс System.Diagnostics.Process для получения информации обо всех процессах, запущенных на вашем компьютере. Затем вы можете попытаться определить, запущено ли намеченное приложение / процесс.

Вы можете использовать GetProcesses() или GetProcessByName() метод. См. эту ссылку MSDN для справки. Я уверен, что может быть более эффективный способ достижения того же самого. НТН

0 голосов
/ 15 декабря 2010

Попробуйте SetWinEventHook Функция WinAPI через P / Invoke.Вы можете перехватить событие EVENT_OBJECT_CREATE, но я не уверен на 100%.Я никогда не делал этого в C #, только в C / C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...