Как включить фокус следует за мышью в Windows 10


44

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

Под Windows 10 я попробовал изменения regedit Xmouse, упомянутые в этой ссылке, которые изначально предназначались для Windows 8: http://winaero.com/blog/turn-on-xmouse-active-window-tracking-focus-follows-mouse- стрелочный особенность-в-окна-8-1-окна-8-и-окна-7 /

Однако у меня возникли следующие проблемы:

  1. Когда вы открываете меню «Пуск» нажатием клавиши Windows, оно не получает ввод с клавиатуры.

  2. Когда вы открываете Пуск, Поиск или Уведомления, нажимая на них, они закрываются, прежде чем вы сможете взаимодействовать с ними.

Есть ли способ получить полезный фокус, следуя за мышью?

Кто-нибудь успешно использует Win10, как это?


Обходной путь для проблемы # 1 должен щелкнуть увеличительное стекло (поиск) вместо этого.
Сочетание

1
Возможно, вы сможете избежать проблемы № 2, установив ActiveWndTrkTimeout более высокое значение. Раньше WinAero Xmouse Tuner имел минимум 500 мс, но теперь в WinAero Tweaker он уменьшен до минимума 100 мс из-за подавляющих запросов. По-прежнему невозможно снизить его до уровня ниже 100 мс, но для этого может быть веская причина.
andz

Ответы:


33

Используйте элементы управления X-Mouse , это самое близкое к истинной Focus Follows Mouse устройство, и у него есть несколько вариантов настройки. Это небольшая утилита с открытым исходным кодом, которая не требует установки или перезагрузки и избавляет вас от изменения реестра самостоятельно.

Насколько я экспериментировал, я могу использовать клавиатуру для поиска файлов / программ после нажатия клавиши Win. Кроме того, меню «Пуск» и «Уведомления» не исчезают до того, как я смогу их использовать, даже с опцией подъема при наведении, поскольку вы можете установить небольшую задержку для поведения (достаточно одной или двухсот мс), что дает вам более чем достаточно места, чтобы переместить указатель на новое окно.

Я использовал это некоторое время, и я очень доволен этим, плюс менеджер окон плитки bug.n. Эта настройка так же близка к использованию dwm в unix.


24

Следующий скрипт powershell должен иметь тот же эффект, что и программа XMouse ... без необходимости запуска стороннего двоичного файла

Код:

$signature = @"
[DllImport("user32.dll")]
public static extern bool SystemParametersInfo(int uAction, int uParam, ref 
int lpvParam, int flags );
"@

$systemParamInfo = Add-Type -memberDefinition  $signature -Name SloppyFocusMouse -passThru

[Int32]$newVal = 1
$systemParamInfo::SystemParametersInfo(0x1001, 0, [REF]$newVal, 2)

Константы, полученные здесь


Это работает прекрасно, лучше, чем все остальное, что я пробовал. Просто сохраните его в файле .ps1, щелкните его правой кнопкой мыши и выберите «Выполнить с Powershell». Вы даже можете добавить его в планировщик задач для запуска при загрузке.
Зурд

11

Изменения в реестре, упомянутые в ссылке на вопрос, работают в Windows 10. Однако, кажется, что они должны быть сделаны, если в настройках специальных возможностей выбран параметр «Активировать окно, наведя на него курсор мыши». Эту опцию можно найти в разделе « Панель управления»> «Простота доступа»> «Изменить работу мыши» .

Если у вас возникли те же проблемы, и флажок установлен , снимите его, нажмите «Применить», выберите его снова и повторите изменения. Мышь должна вести себя правильно при следующем входе в систему.


3
Однако, это делает то, что предлагает название - автоматически поднимает окна. ОП хочет, чтобы он НЕ поднимался, но все же позволял фокусироваться на фоновом окне. Следуя инструкциям Q's Winaero (установка первого шестнадцатеричного кода на 9F) и вход в систему и выход из нее, похоже, работает нормально. Win key + typing = работает для поиска. Кнопка Win с мышью + ввод = не работает для поиска, если фокус находится вдали от указанной кнопки, но работает, если я удерживаю мышь над кнопкой. Уничтожение explorer.exe и запуск userinit.exe не помогли загрузить настройки reg, поэтому выход из системы, по-видимому, необходим.
mpag

Применение изменений реестра останавливает автоматическое повышение.
aleixosk

6

В действительности, в Windows есть флаг для включения focus-follow-mouse («отслеживание активного окна»), который можно легко включить с помощью чудовищного вызова API-интерфейса Win32 «SystemParametersInfo» . Существуют сторонние программы для включения флага, такие как X-Mouse Controls , или вы можете выполнить вызов напрямую, используя PowerShell.

В документации не всегда очень ясно, как используется pvParamаргумент, и некоторые фрагменты powershell неправильно передают указатель на значение, а не само значение, при установке этого конкретного флага. Это всегда интерпретируется как true, то есть они случайно работают для включения флага, но не для его отключения снова.

Ниже приведен фрагмент PowerShell, который выполняет вызов правильно. Он также включает в себя надлежащую проверку ошибок, и я попытался сделать ставку на чистоту, а не на краткость, чтобы упростить добавление упаковщиков для других функций SystemParametersInfo, если вы найдете то, что вас интересует.

Кричите-к pinvoke.net для того , чтобы быть полезным ресурсом для вещей , как это.

Add-Type -TypeDefinition @'
    using System;
    using System.Runtime.InteropServices;
    using System.ComponentModel;

    public static class Spi {
        [System.FlagsAttribute]
        private enum Flags : uint {
            None            = 0x0,
            UpdateIniFile   = 0x1,
            SendChange      = 0x2,
        }

        [DllImport("user32.dll", SetLastError = true)]
        private static extern bool SystemParametersInfo(
            uint uiAction, uint uiParam, UIntPtr pvParam, Flags flags );

        [DllImport("user32.dll", SetLastError = true)]
        private static extern bool SystemParametersInfo(
            uint uiAction, uint uiParam, out bool pvParam, Flags flags );

        private static void check( bool ok ) {
            if( ! ok )
                throw new Win32Exception( Marshal.GetLastWin32Error() );
        }

        private static UIntPtr ToUIntPtr( this bool value ) {
            return new UIntPtr( value ? 1u : 0u );
        }

        public static bool GetActiveWindowTracking() {
            bool enabled;
            check( SystemParametersInfo( 0x1000, 0, out enabled, Flags.None ) );
            return enabled;
        }

        public static void SetActiveWindowTracking( bool enabled ) {
            // note: pvParam contains the boolean (cast to void*), not a pointer to it!
            check( SystemParametersInfo( 0x1001, 0, enabled.ToUIntPtr(), Flags.SendChange ) );
        }
    }
'@

# check if mouse-focus is enabled
[Spi]::GetActiveWindowTracking()

# disable mouse-focus (default)
[Spi]::SetActiveWindowTracking( $false )

# enable mouse-focus
[Spi]::SetActiveWindowTracking( $true )

2
Здравствуйте, добро пожаловать в суперпользователя. Пожалуйста, когда вы делаете новый вклад, постарайтесь дать некоторые пояснения к вашему коду. Хотя ваш ответ кажется правильным, было бы лучше, если бы вы объяснили ПОЧЕМУ это работает, поэтому, если кто-то хочет сделать что-то немного другое, он может получить отправную точку в вашем ответе. В любом случае, спасибо, что поделились с нами своими знаниями!
Д.Гойко

Там я уточнил объяснение.
Матфейс

1
Большой! Я рад быть вашим первым возражением, надеюсь, еще много будет: D
DGoiko

1

Для тех, кто не смог заставить его работать, просто вычтя 40 из первого байта UserPreferencesMask, просто получите саму утилиту WinAero Tweaker по адресу http://winaero.com/download.php?view.1796.

Обратите внимание, что проблема № 1 выше все еще присутствует, но ее легко обойти, просто используя значок увеличительного стекла (поиск) справа от меню «Пуск» (сочетание клавиш Window + S). Небольшая цена за функциональность X-Mouse.

У меня не возникает проблема № 2 при использовании WinAero Tweaker.


1

Использование метода для достижения неаккуратного поведения мыши, к которому я так привык, из предыдущих версий Windows и Linux из поста . У меня нет проблемы № 2, которая у вас возникла. Проблема № 1, которая возникнет у вас и у всех при использовании этого изменения реестра, не является проблемой. Это делает точно так, как ожидалось, потому что вы изменили способ обработки фокуса в окнах с этой модификацией. Использование клавиши Windows переводит мышь в меню «Пуск», а не в меню поиска, поэтому она фокусируется, а не в меню поиска. Так что, если вы хотите использовать поиск, либо нажмите на панели поиска или значок увеличения (в зависимости от ваших настроек для его появления), либо используйте комбинацию клавиш Win+, Sи это будет правильно.


0

Я еще не тестировал Winaero, потому что:

  1. Я не заинтересован в запуске неизвестного программного обеспечения из Интернета.
  2. После обновления всех компьютеров, которые я использую, с Windows 7 до Windows 10, параметр «Активировать окно с помощью мыши» в Windows 7 продолжал действовать в Windows 10, хотя, похоже, нет способа установка этого в Windows 10 GUI.

Я не нашел эти обходные пути нигде в Интернете, поэтому я запишу здесь для других.

Использование следующих обходных путей делает практичным использование Windows 10 в режиме Xmouse:

  1. Переключение на другое окно при наличии нескольких окон с помощью значка приложения на панели задач:

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

  2. Переключение на другой виртуальный рабочий стол или приложение с помощью кнопки просмотра задачи:

    • Нажмите на кнопку просмотра задач.
    • Нажмите еще раз и удерживайте кнопку.
    • Переместите указатель на нужную задачу или виртуальный рабочий стол.
    • Отпустите кнопку мыши, затем нажмите еще раз.

Примечание. Параметр Windows 10 «Прокрутка неактивных окон при наведении на них курсора» является полезным дополнением (см. Пуск -> Настройки -> Устройства -> Мышь и сенсорная панель ). Это кажется независимым от функциональности Xmouse, и ON, кажется, по умолчанию.


0

Установите для параметра Regkey HKCU \ Control Panel \ Desktop \ ActiveWndTrackTimeout значение больше 0, чтобы задать задержку установки, если другое окно не станет активным


1
Исправить свой ключ; это Трк не Трек; например, ActiveWndTrkTimeout. Я понятия не имею, что делает Track, но смена Trk - это то, что работает для меня.
Люмпинос

-2

Решить проблему № 2 в Windows 10

2) Когда вы открываете Пуск, Поиск или Уведомления, нажимая на них, они закрываются, прежде чем вы сможете взаимодействовать с ними.

Все, что вам нужно сделать, это:

  • Нажмите Windows+X
  • Панель управления
  • Простота доступа
  • Измените, как работает ваша мышь
  • Установите флажок: запретить автоматическое расположение окон при перемещении к краю экрана

Нет необходимости в стороннем программном обеспечении.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.