78 votes

Comment activer le focus suit la souris dans Windows 10

Je voudrais activer le "raise-on-click" et le "sloppy focus-follows-mouse" sur Windows 10 car c'est la configuration que j'utilise depuis des années sur Windows et Linux.

Sous Windows 10, j'ai essayé les modifications du registre Xmouse mentionnées dans ce lien qui étaient initialement destinées à Windows 8: http://winaero.com/blog/turn-on-xmouse-active-window-tracking-focus-follows-mouse-pointer-feature-in-windows-8-1-windows-8-and-windows-7/

Cependant, j'ai rencontré les problèmes suivants:

  1. Lorsque vous ouvrez le menu Démarrer en appuyant sur la touche Windows, il ne reçoit pas de saisie au clavier.

  2. Lorsque vous ouvrez Démarrer, Recherche ou Notifications en cliquant dessus, ils se ferment avant que vous puissiez interagir avec eux.

Y a-t-il un moyen d'obtenir une utilisation utilisable du focus follows mouse?

Est-ce que quelqu'un utilise avec succès Win10 de cette manière?

1 votes

Une solution de contournement pour le problème n°1 est de cliquer sur la loupe (recherche) à la place. La touche de raccourci pour cela est Window + S.

1 votes

Vous pourriez être en mesure d'éviter le problème n°2 en définissant ActiveWndTrkTimeout sur une valeur plus élevée. WinAero Xmouse Tuner avait autrefois un minimum de 500 ms, mais il est maintenant réduit à un minimum de 100ms dans WinAero Tweaker en raison de demandes massives. Il n'est toujours pas possible de le réduire en dessous de 100 ms, mais il pourrait y avoir une bonne raison à cela.

57voto

ArthurChamz Points 783

Utilisez X-Mouse Controls, c'est ce que j'ai trouvé de plus proche du véritable Focus Follows Mouse, et il propose quelques options à ajuster. C'est un petit utilitaire open-source qui ne nécessite pas d'installation ni de redémarrage, et cela vous évite de devoir modifier le registre vous-même.

Dans mes expérimentations, j'ai pu utiliser le clavier pour rechercher des fichiers/programmes après avoir appuyé sur la touche Win. De plus, le menu Démarrer et les notifications ne disparaissent pas avant que je puisse les utiliser, même avec l'option de mise au premier plan au survol, car vous pouvez définir un petit délai pour ce comportement (une ou deux centaines de ms suffiront), ce qui vous laisse amplement de temps pour déplacer le pointeur vers la nouvelle fenêtre.

Je l'ai utilisé pendant un certain temps et j'en suis assez satisfait, en plus du gestionnaire de fenêtres en mosaïque bug.n. Cette configuration est la plus proche que j'ai trouvée de l'utilisation de dwm sur Unix.

34voto

golvok Points 439

Le script powershell suivant devrait avoir le même effet que le programme XMouse... sans avoir à exécuter un binaire tiers

Code:

$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 récupérées à partir de ici

0 votes

Cela fonctionne parfaitement, mieux que tout ce que j'ai essayé. Il suffit de sauvegarder cela dans un fichier .ps1, de faire un clic droit dessus et de choisir Exécuter avec Powershell. Vous pouvez même l'ajouter dans le Planificateur de tâches pour le démarrer au démarrage.

1 votes

Pour éliminer le délai par défaut de 500 ms, j'ai utilisé regedit pour modifier ActiveWndTrkTimeout de HKEY_CURRENT_USER\Control Panel\Desktop à 0. Vous devrez vous déconnecter puis vous reconnecter.

0 votes

Pour un SloppyFocusMouse permanent, j'ai changé la première donnée hexadécimale de UserPreferenceMask de Computer\HKEY_CURRENT_USER\Control Panel\Desktop de "9e" à "9f"

18voto

Les modifications du registre mentionnées dans le lien de la question fonctionnent sur Windows 10. Cependant, il semble qu'elles doivent être effectuées lorsque l'option "Activer une fenêtre en survolant avec la souris" est sélectionnée dans les paramètres d'accessibilité. Cette option se trouve sous Panneau de configuration > Facilité d'accès > Modifier le fonctionnement de votre souris.

Cette option fait également en sorte que les fenêtres se lèvent automatiquement, mais les modifications du registre empêchent ce comportement.

Si vous rencontrez les mêmes problèmes et que la case à cocher est sélectionnée, décochez-la, cliquez sur Appliquer, sélectionnez-la à nouveau et refaites les modifications. La souris devrait fonctionner correctement la prochaine fois que vous vous connectez.

4 votes

Cependant, cela fait ce que le nom suggère - élève les fenêtres automatiquement. OP veut que cela ne se lève pas, mais permet toujours de se concentrer sur une fenêtre en arrière-plan. Suivant les instructions de Winaero de Q (définir le premier code hexadécimal sur 9F) et se déconnecter et se reconnecter semble fonctionner correctement. Touche Win + saisie = fonctionne pour la recherche. Bouton Win avec la souris + saisie = NE fonctionne PAS pour la recherche si le focus est jamais éloigné dudit bouton, mais fonctionne si je garde la souris en survol du bouton. Tuer explorer.exe et exécuter userinit.exe n'a pas fonctionné pour charger les paramètres du registre, donc la déconnexion semble nécessaire.

13voto

Matthijs Points 246

Windows a en fait un indicateur pour activer le focus suivant la souris ("suivi de la fenêtre active"), qui peut être activé facilement via l'énorme appel API Win32 "SystemParametersInfo". Il existe des programmes tiers pour activer l'indicateur, tels que X-Mouse Controls, ou vous pouvez effectuer l'appel directement en utilisant PowerShell.

La documentation n'est pas toujours très claire sur la façon dont l'argument pvParam est utilisé, et certains extraits de code PowerShell transmettent incorrectement un pointeur à la valeur, plutôt que la valeur elle-même, lors du réglage de cet indicateur particulier. Cela finit toujours par être interprété comme true, c'est-à-dire qu'ils fonctionnent accidentellement pour activer l'indicateur, mais pas pour le désactiver à nouveau.

Ci-dessous se trouve un extrait de code PowerShell qui effectue l'appel correctement. Il inclut également une vérification d'erreur appropriée, et j'ai essayé d'opter pour la propreté plutôt que la brièveté, pour faciliter également l'ajout de wrappers pour d'autres fonctionnalités de SystemParametersInfo, si vous en trouvez qui vous intéressent.

Mention spéciale à pinvoke.net pour être une ressource utile pour des choses comme celle-ci.

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 ) );
        }
    }
'@

# vérifier si le focus de la souris est activé
[Spi]::GetActiveWindowTracking()

# désactiver le focus de la souris (par défaut)
[Spi]::SetActiveWindowTracking( $false )

# activer le focus de la souris
[Spi]::SetActiveWindowTracking( $true )

2 votes

Bonjour, bienvenue sur superutilisateur. S'il vous plaît, lorsque vous apportez de nouvelles contributions, essayez de donner des explications attachées à votre code. Bien que votre réponse semble correcte, ce serait mieux si vous expliquiez POURQUOI cela fonctionne, afin que si quelqu'un souhaite réaliser quelque chose de légèrement différent, il puisse partir de votre réponse. Quoi qu'il en soit, merci de partager vos connaissances avec nous!

1 votes

Il, j'ai étoffé l'explication.

1 votes

Super ! Je suis content d'être ton premier upvote, j'espère qu'il y en aura beaucoup plus :D

2voto

andz Points 201

Pour ceux qui n'ont pas réussi à le faire en soustrayant simplement 40 du premier octet de UserPreferencesMask, obtenez simplement l'utilitaire WinAero Tweaker lui-même sur http://winaero.com/download.php?view.1796

Notez que le problème n°1 ci-dessus est toujours présent, mais facilement contourné en utilisant simplement l'icône de la loupe (recherche) à droite du menu Démarrer (raccourci clavier Windows + S). Un petit prix à payer pour obtenir la fonctionnalité X-Mouse.

Je ne rencontre pas le problème n°2 lorsque j'utilise WinAero Tweaker.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X