¿Cómo se habilita el foco sigue al mouse en Windows 10?

44

Me gustaría elevar al hacer clic y descuidar foco-sigue-mouse en Windows 10 porque esta es la configuración que he estado usando en Windows y Linux durante años.

En Windows 10, probé los cambios regedit Xmouse mencionados en este enlace que originalmente estaban destinados a Windows 8: http://winaero.com/blog/turn-on-xmouse-active-window-tracking-focus-follows-mouse- puntero-característica-en-windows-8-1-windows-8-and-windows-7 /

Sin embargo, experimenté los siguientes problemas:

  1. Cuando abre el menú Inicio presionando la tecla de Windows, no recibe entrada de teclado.

  2. Cuando abre Inicio, Búsqueda o Notificaciones haciendo clic en ellos, se cierran antes de que pueda interactuar con ellos.

¿Hay alguna forma de obtener un enfoque utilizable después del mouse?

¿Alguien está usando Win10 con éxito así?

Gordon Wrigley
fuente
Una solución para el problema # 1 es hacer clic en la lupa (buscar) en su lugar. La tecla de acceso directo para esto es Window + S.
andz
1
Es posible que pueda evitar el Problema # 2 estableciendo ActiveWndTrkTimeout en un valor más alto. WinAero Xmouse Tuner solía tener un mínimo de 500 ms, pero ahora se ha reducido a un mínimo de 100 ms en WinAero Tweaker debido a solicitudes abrumadoras. Todavía no es posible bajarlo a menos de 100 ms, pero puede haber una buena razón para ello.
andz

Respuestas:

33

Usa los controles X-Mouse , es lo más parecido que he encontrado al verdadero Focus Follows Mouse, y tiene algunas opciones para ajustar. Es una pequeña utilidad de código abierto que no requiere instalación o reinicio, y le evita cambiar el registro usted mismo.

Hasta donde he experimentado, puedo usar el teclado para buscar archivos / programas después de presionar la tecla Win. Además, el menú de Inicio y Notificaciones no desaparece antes de que pueda usarlos, incluso con la opción de subir al pasar el mouse, ya que puede establecer un pequeño retraso para el comportamiento (bastará uno o doscientos ms), lo que le proporciona espacio más que suficiente para mover el puntero a la nueva ventana.

Lo he usado durante un tiempo y estoy bastante contento con él, además del administrador de ventanas de mosaico bug.n. Esta configuración está tan cerca como he estado de usar dwm en Unix.

ArthurChamz
fuente
24

El siguiente script de PowerShell debería tener el mismo efecto que el programa XMouse ... sin tener que ejecutar un binario de terceros

Código:

$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)

Constantes recuperadas de aquí

golvok
fuente
Eso funciona de maravilla, mejor que cualquier otra cosa que haya probado. Simplemente guarde esto en un archivo .ps1, haga clic derecho y elija Ejecutar con Powershell. Incluso puede agregarlo en el Programador de tareas para comenzar en el arranque.
Zurd
11

Las modificaciones de registro mencionadas en el enlace de la pregunta funcionan en Windows 10. Sin embargo, parece que deben hacerse cuando la opción "Activar una ventana al pasar el mouse por encima" está seleccionada en la configuración de accesibilidad. Esta opción se puede encontrar en Panel de control> Facilidad de acceso> Cambiar cómo funciona el mouse .

Si tiene los mismos problemas y la casilla de verificación está seleccionada, desactívela, haga clic en aplicar, selecciónela nuevamente y vuelva a hacer las modificaciones. El mouse debería funcionar correctamente la próxima vez que inicie sesión.

aleixosk
fuente
3
Sin embargo, eso hace lo que su nombre sugiere: levanta las ventanas automáticamente. OP quiere que NO suba, pero aún así permite enfocarse en una ventana de fondo. Seguir las instrucciones de Winaero de la Q (establecer el primer código hexadecimal en 9F) e iniciar y cerrar sesión parece estar funcionando bien. Win key + typing = funciona para la búsqueda. El botón Win con el mouse + escribiendo = NO funciona para la búsqueda si el foco está lejos de dicho botón, pero si mantengo el mouse sobre el botón. Matar explorer.exe y ejecutar userinit.exe no funcionó para cargar la configuración de registro, por lo que parece necesario cerrar la sesión.
mpag
La aplicación de las modificaciones del registro detiene el aumento automático.
aleixosk
6

Windows en realidad tiene un indicador para habilitar focus-follows-mouse ("seguimiento de ventana activa"), que se puede habilitar fácilmente a través de la monstruosa llamada Win32 API "SystemParametersInfo" . Existen programas de terceros para habilitar el indicador, como los controles X-Mouse , o puede realizar la llamada directamente con PowerShell.

La documentación no siempre es muy clara sobre cómo pvParamse usa el argumento, y algunos fragmentos de PowerShell pasan incorrectamente un puntero al valor, en lugar del valor en sí mismo, al establecer este indicador en particular. Esto termina siendo siempre interpretado como true, es decir, accidentalmente funcionan para habilitar la bandera, pero no para deshabilitarla nuevamente.

A continuación se muestra un fragmento de PowerShell que realiza la llamada correctamente. También incluye una verificación de errores adecuada, y he intentado ir por la limpieza en lugar de la brevedad, para que también sea más fácil agregar envoltorios para otras funciones SystemParametersInfo, en caso de que encuentre alguno que le interese.

Gracias a pinvoke.net por ser un recurso útil para cosas como esta.

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 )
Matthijs
fuente
2
Hola, bienvenido al superusuario. Por favor, cuando haga nuevas contribuciones, intente dar algunas explicaciones adjuntas a su código. Aunque su respuesta parece correcta, sería mejor si explicase POR QUÉ funciona, por lo que si alguien quiere hacer algo ligeramente diferente, puede obtener un punto de partida para su respuesta. De todos modos, ¡gracias por compartir su conocimiento con nosotros!
DGoiko
Allí, he desarrollado la explicación.
Matthijs
1
¡Excelente! Me alegra ser tu primer voto, espero que lleguen muchas más: D
DGoiko
1

Para aquellos que no pudieron hacerlo funcionar restando 40 del primer byte de UserPreferencesMask, solo obtengan la utilidad WinAero Tweaker en http://winaero.com/download.php?view.1796

Tenga en cuenta que el problema # 1 anterior todavía está presente, pero se solucionó fácilmente con solo usar el icono de lupa (búsqueda) a la derecha del menú de inicio (tecla de acceso directo Ventana + S). Un pequeño precio a pagar por obtener la funcionalidad X-Mouse.

No experimento el problema # 2 cuando uso WinAero Tweaker.

andz
fuente
1

Usando el método para lograr el comportamiento descuidado del mouse, al que estoy tan acostumbrado, desde versiones anteriores de Windows y Linux desde la publicación . No tengo el problema # 2 que estás teniendo. El problema n. ° 1 que usted y todos tendrán al usar esta modificación del registro no es un problema. Hace exactamente lo esperado porque ha cambiado la forma en que se maneja el foco en Windows con esta modificación. El uso de la tecla de Windows lleva el mouse al menú de inicio, no al menú de búsqueda, por lo que se enfoca, no al menú de búsqueda. Entonces, si desea usar la búsqueda, haga clic en la barra de búsqueda o en el ícono de aumento (dependiendo de su configuración para su apariencia) o use la combinación de teclas Win+ Sy hará lo correcto.

sudo
fuente
0

Todavía no he probado Winaero porque:

  1. No estoy interesado en ejecutar software desconocido de Internet.
  2. Como actualicé todas las PC que uso de Windows 7 a Windows 10, la configuración de Windows 7 "Activar una ventana al pasar el mouse sobre ella con el mouse" ha seguido vigente en Windows 10, aunque parece que no hay ningún método de configurando esto en la GUI de Windows 10.

Todavía no he encontrado estas soluciones en Internet, así que documentaré aquí para otros.

Al usar las siguientes soluciones, es práctico usar Windows 10 en modo Xmouse:

  1. Cambiar a otra ventana cuando hay varias ventanas disponibles a través del icono de la aplicación en la barra de tareas:

    NO haga clic en el icono de la aplicación en la barra de tareas antes de intentar seleccionar una ventana. Si lo hace, tan pronto como mueva el puntero del mouse sobre la barra de tareas, las ventanas desaparecerán. Simplemente coloque el cursor sobre el ícono de la aplicación hasta que aparezcan las ventanas, luego puede mover el puntero al que necesita.

  2. Cambiar a otra aplicación o escritorio virtual con el botón de vista de tareas:

    • Haga clic en el botón de vista de tareas.
    • Haga clic nuevamente y mantenga presionado el botón.
    • Mueva el puntero a la tarea requerida o al escritorio virtual.
    • Suelte el botón del mouse, luego haga clic nuevamente.

Nota: la configuración de Windows 10 "Desplazar ventanas inactivas cuando paso el mouse sobre ellas" es una adición útil (consulte Inicio -> Configuración -> Dispositivos -> Mouse y panel táctil ). Esto parece independiente de la funcionalidad de Xmouse y ON parece ser el predeterminado.

Chris bueno
fuente
0

Establezca Regkey HKCU \ Control Panel \ Desktop \ ActiveWndTrackTimeout en algo mayor que 0 para retrasar la configuración a menos que se active otra ventana

Volker
fuente
1
Arregla tu llave; es Trk no Track; por ejemplo, ActiveWndTrkTimeout. No tengo idea de lo que hace el Track one, pero cambiar el Trk one es lo que funciona para mí.
lumpynose
-2

Para resolver el problema # 2 en Windows 10

2) Cuando abre Inicio, Búsqueda o Notificaciones haciendo clic en ellos, se cierran antes de que pueda interactuar con ellos.

Todo lo que necesitas hacer es:

  • Presione Windows+X
  • Panel de control
  • Facilidad de acceso
  • Cambia el funcionamiento de tu mouse
  • Habilite la casilla de verificación: evite que las ventanas se organicen automáticamente cuando se mueven al borde de la pantalla

No hay necesidad de software de terceros.

Vincent Ho
fuente