Windows make window active

В этой публикации, друзья, рассмотрим, как активировать окна Windows лишь по наведению курсора. По умолчанию Windows фокусируется по клику: окно становится активным и попадает в фокус, только если мы кликнем на нём мышью. Куда мы бы ни перемещали указатель мыши, ни одно неактивное окно не станет активным, пока мы на него не кликнем. Это стандартное поведение Windows, к которому мы привыкли. Но операционная система может вести себя в этом плане иначе – окно под указателем мыши может становиться активным без клика по нему, просто по наведению курсора. Такое поведение окон менее предсказуемо, но позволит быстрее переключаться между окнами. Какое поведение окон больше подойдёт каждому из нас – привычное предсказуемое или непривычное более быстрое – можно решить, элементарно попробовав оба эти поведения.


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

Такое поведение окон может ускорить работу с компьютером благодаря снижению количества кликов и упреждению ошибок ввода. Не нужно кликать, чтобы активировать окно, достаточно просто навести на него курсор, и оно само станет активным. Многие часто, не глядя на экран, набирают текст, а потом с досадой обнаруживают, что набирали этот текст не в том окне, что нужно, просто забыв сделать клик на нужном окне. Это труд, пропавший зря. Меньше кликов – это не только увеличение нашей производительности за компьютером, это также снижение напряжения мышц, а, соответственно, снижение их усталости, что особенно важно при длительной работе за компьютером. Ну и, друзья, такое поведение окон в целом сделает процесс работы с компьютером более плавным.

Безусловно, поведение окон с активацией при наведении курсора – это решение не для всех подряд случаев использования компьютера. Например, при работе с сенсорным экраном или тачпадом активация по клику может быть более точной, чем наведение курсора, и предотвратить случайную активацию не того окна.

Для настройки активации окон при наведении курсора в любой Windows открываем классическую панель управления. Проходим в ней путь:

Панель управления → Специальные возможности → Центр специальных возможностей → Упрощение работы с мышью

Смотрим блок настроек упрощённого управления окнами. Устанавливаем галочку настройки «Активировать окно при наведении на него указателя мыши». Нажимаем «Применить».


Другая нативная возможность Windows, на которую наверняка также мало кто обращал внимание – прокрутка неактивных окон. Благодаря ей можем не смещать фокус с активного окна, но прокрутить неактивное окно, наведя на его область прокрутки. Такая возможность может сделать удобной одновременную работу с программами, предусматривающими ввод данных, и программами, отображающими данные. Скроля информацию в последних, не будем терять фокус в первых и сможем выполнять ввод без задержек и отвлечений.

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

Настраивается эта возможность в современных настройках Windows 10 и 11. В приложении «Параметры» идём по пути:

  • Устройства → Мышь — в Windows 10;
  • Bluetooth и устройства → Мышь — в Windows 11.

Включаем настройку «Прокручивать неактивные окна при наведении на них», если она отключена.


При задействовании обоих рассмотренных функций с помощью бесплатной программы-твикера Winaero Tweaker получим дополнительно возможности по их настройке. Которые могут улучшить работу с окнами и предотвратить случайные переключения на не те окна. В программе Winaero Tweaker проходим путь:

Это настройки XMouse — собственно, системной функции управления поведением окон при взаимодействии с мышью. Устанавливаем галочку «Enable window tracking», это включение отслеживания окна, т.е. та самая, что и предлагаемая нативно Windows, автоматическая активация окон при подведении к ним курсора мыши, без клика.

Ниже нам предлагается настройка «Window activation timeout», она позволяет настроить задержку такой активации для предотвращения случайной активации окон. На шкале можем выбрать то или иное значение задержки. Чем больше значение, тем больше задержка.

Ещё ниже есть настройка «Enable window raising», это выдвижение на передний план активного окна при подведении к нему курсора, и это, собственно, то, как работает системная эта функция Windows. Если же не установить галочку этой настройки, окно при подведении к нему курсора будет активно, но не будет выдвигаться на передний план. Это нечто золотой середины между привычным поведением окон, когда нужен клик для их активации и когда окна переключаются при подведении курсора. При таком раскладе сможем сохранять фокус на нужном окне и работать в фоновых окнах. Это может быть удобно при работе с наложенными окнами, да и вообще в принципе.

В самом низу есть настройка «Scroll inactive windows when you hover over them», это прокрутка неактивных окон, но, в отличие от системной реализации, чуть гибче настраиваемая:

  • Scroll only active window – прокрутка только активного окна;
  • Scroll active window and inactive Modern apps — прокрутка активного окна и неактивных современных приложений;
  • Scroll any window (active or inactive, regardless of its type) – прокрутка любого окна (активного или неактивного, независимо от его типа).

Для применения внесённых программой изменений может понадобится перезаход в Windows.


Друзья, по теме улучшения личной производительности работы с компьютером смотрите также возможности окон Windows 11.

(УстановитьАктивноеОкно)

Функция SetActiveWindow активизирует окно.

Синтаксис

HWND SetActiveWindow
(
	HWND hWnd		// дескриптор окна, которое активизируется
);

Параметры
hWnd
Идентифицирует окно верхнего уровня, которое будет активизировано.

Возвращаемые значения
Если функция завершается успешно, величина возвращаемого значения — дескриптор окна, которое было до этого активно.

Замечания
Функция SetActiveWindow активизирует окно, но только не в том случае, когда прикладная программа в фоновом режиме. Окно будет приведено в активный режим (на вершину Z-последовательности), если прикладная программа являлась высокоприоритетной, когда ему устанавливали активность.
Если окно, идентифицированное параметром hWnd, было создано вызывающим потоком, состояние активного окна вызывающего потока устанавливается в hWnd. Иначе, состояние активного окна вызывающего потока устанавливается в значение ПУСТО (NULL).
С другой стороны, функция окна SetForegroundWindow, активизирует окно и переводит его в разряд приоритетных. Прикладная программа должна вызвать SetForegroundWindow только тогда, если требуется отобразить критические ошибки или информацию, которая нуждается в немедленном внимании пользователя.

Смотри также
GetActiveWindow, SetForegroundWindow, WM_ACTIVATE

Размещение и совместимость SetActiveWindow

Windows NT				Да 
Win95					Да 
Win32s					Да 
Импортируемая библиотека			user32.lib 
Заголовочный файл				winuser.h 
Unicode					Нет 
Замечания по платформе			Не имеется

  • Forum
  • Windows Programming
  • Run program and make window active

Run program and make window active

How do I run a program with win32 context as active? Currently it is always shown as inactive.

I already used SetFocus(handle) and still inactive.

Last edited on

are you asking about always-on-top type behavior? or something else?

What are you trying to accomplish? There are several WIN32 APIs:
BringTofront()
Activate()
SetActiveWindow()
SetForegroundWindow()
BringWindowToTop()
SetWindowPos()

Last edited on

SetActiveWindow() and BringWindowToTop() only changes the Z-order of your windows and sets the «active» window within the calling application. It does not bring your application to the foreground, if another application is currently in the foreground!

SetForegroundWindow() is used to actually bring a window to the foreground. This can be a window of the calling application, or a window belonging to another application. But: The call to SetForegroundWindow() will only succeed, if the current foreground window belongs to the calling application, or if the calling application was created by the application owning the current foreground window.

The actual rules are a bit more complex:
https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setforegroundwindow

In other words: Stealing the focus from the current «foreground» application by calling SetForegroundWindow() from a «background» application is not possible – in «modern» versions of Windows. And that is for good reasons 😏

BTW: You can use SetWindowLongW() with GWL_EXSTYLE and WS_EX_TOPMOST to enable the «topmost» style for your window, so that it will appear on top of all other windows, regardless of whether your application is currently active or not…

Last edited on

Thanks guys. I think this has something to do with parenting a child window to a main window which is sort of a hack or maybe there’s a right way to do it?

I tried again without the child window and the window is active and focus when starting as it should be.

Last edited on

Topic archived. No new replies allowed.



  • #8

«Activate a window by hovering over it with the mouse» is absent on my 22621.1702

1684908042295.png

  • OS
    Windows 11
    Computer type
    PC/Desktop
    CPU
    6600k@4.6
    Motherboard
    Gigabyte Z170M-D3H
    Memory
    16 GB Samsung EB0-CK0@ 2300 1.49v 11-13-12-28
    Graphics Card(s)
    Radeon 470
    Sound Card
    Prodigy HD2
    Monitor(s) Displays
    LG 34″
    Screen Resolution
    3440×1440
    Hard Drives
    MSI Spatium M470 1 TB
    PSU
    Corsair RM650x
    Case
    Chieftec Aegis CX-05B-BM
    Cooling
    Deep Cool AK620
    Keyboard
    RED SQUARE Tesla RGB
    Mouse
    Logitech G5
    Internet Speed
    60Mb/s
    Browser
    Cent

Declare Function SetActiveWindow Lib "user32" (ByVal hwnd As Long) As Long


SetActiveWindow делает данное окно активным для программы, передавая ему фокус. Это окно только становится приоритетным окном, если приложение, которое имеет его — в настоящее время является активной программой. Эта функция может использоваться только на окнах, которые имеет программа

Возвращаемое значение

В успешном случае функция возвращает дескриптор предыдущего активного окна

Параметры

hwnd
Дескриптор активизируемого окна

Пример

' Делаем окно Form1 активным окном для программы.
' Эта функция не будет делать окно приоритетным,
' если пользователь  работает в настоящее время
' с отдельной программой
Dim retval As Long  ' возвращаемое значение

' Установим Form1 как активное окно приложения
retval = SetActiveWindow(Form1.hWnd)

Смотри также

GetActiveWindow, SetForegroundWindow

Категория

Окна

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Intel core 2 duo e7400 windows 10
  • Windows 10x download iso
  • Как переключить сеть с общественной на домашнюю windows 10
  • Создать установочную флешку mac os из под windows
  • Как извлечь из iso образа windows 10 pro