В этой публикации, друзья, рассмотрим, как активировать окна 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
-
- 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
Категория
Окна