Подтвердить что ты не робот

Окно Foreground Vs Active

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

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

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

Из MSDN

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

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

переднего плана/фона

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