Передний план против активного окна

в Windows, в чем разница между основным и активным окном? Чтобы быть конкретным, при каких обстоятельствах окно переднего плана не может быть активным окном? Если 2 термина относятся к одной и той же концепции, почему есть 2 термина.

в документации msdn здесь упоминается " щелчок по окну или с помощью ALT+TAB или ALT+ESC комбинация клавиш " делает окно активным, а также на переднем плане. Есть ничего явно о разнице между 2 терминами.Проверка MSDN.

2 ответов


активное окно (результат GetActiveWindow()) - окно прикреплено к вызывающему потоку это получает ввод. Окно переднего плана (результат из GetForegroundWindow()) - Окно, которое в настоящее время получение информации независимо от его отношения к вызывающему потоку. Активное окно по существу локализовано в приложении; окно переднего плана является глобальным для системы.

например, если окно, принадлежащее другому процессу, является передним планом, вызывая GetActiveWindow() из вашего собственного процесса возврата NULL.

Я считаю, что это правда, что быть окном переднего плана означает быть активным окном, но обратное неверно. Также обратите внимание, что в современных Windows приложения обычно не могут использовать SetForegroundWindow() чтобы украсть фокус из другого процесса (если этот процесс явно дали разрешение через AllowSetForegroundWindow).


Я нахожу описание в MSDN немного запутанным, но вот мой пересмотренный вариант:

сначала окно переднего плана и фона не имеет ничего общего с активными окнами, оно связано с потоковой обработкой, см. ниже. Таким образом, технически возможно иметь фоновое окно в качестве активного окна, однако это запутанно, и система не делает этого для вас, вместо этого ваше приложение должно вызвать, например, SetWindowPos, чтобы сделать фоновое окно активным.

система может только при наличии одного активного окна верхнего уровня система активирует окно верхнего уровня, если вы работаете над дочерним окном. Затем все входные данные направляются в активное окно, а затем обычно передаются в дочернее окно.

/----------------------\
|                      |
|   FOREGROUND WINDOW  |--\
|                      |  |
\----------------------/  |
  | BACKGROUND WINDOW     |
  \-----------------------/

/----------------------\
|                      |
|    ACTIVE WINDOW     |--\
|                      |  |
\----------------------/  |
  | BACKGROUND WINDOW     |
  \-----------------------/

из MSDN

Активное Окно

активное окно-это окно верхнего уровня приложения, с которым в данный момент работает пользователь. Чтобы пользователь мог легко идентифицировать активное окно, система помещает его в верхнюю часть z-порядка и изменяет цвет строки заголовка и границы на определенные системой активные цвета окна. Только окно верхнего уровня может быть активным. Когда пользователь работает с дочерним окном, система активирует родительское окно верхнего уровня, связанное с дочерним окном.

Передний План / Фон

каждый процесс может иметь несколько потоков выполнения, и каждый поток может создавать окна. Нить, которая созданное окно, с которым в данный момент работает пользователь, называется потоком переднего плана, а окно называется окном переднего плана. Все остальные потоки являются фоновыми потоками, а окна, созданные фоновыми потоками, называются фоновыми окнами.