如何在 Windows 10 中启用焦点跟随鼠标

Gor*_*ley 71 mouse xmouse window-focus windows-10

我想在 Windows 10 上提高点击和草率的焦点跟随鼠标,因为这是我多年来一直在 Windows 和 Linux 上使用的设置。

在 Windows 10 下,我尝试了此链接中提到的最初适用于 Windows 8 的 regedit Xmouse 更改:http ://winaero.com/blog/turn-on-xmouse-active-window-tracking-focus-follows-mouse- pointer-feature-in-windows-8-1-windows-8-and-windows-7/

但是,我遇到了以下问题:

  1. 当您通过按 Windows 键打开“开始”菜单时,它不会接收键盘输入。

  2. 当您通过单击打开“开始”、“搜索”或“通知”时,它们会在您与它们交互之前关闭。

无论如何获得可用的焦点跟随鼠标?

有没有人像这样成功使用Win10?

Art*_*amz 53

使用X-Mouse Controls,它是我发现的最接近真正的 Focus Follows Mouse 的,它有一些调整选项。它是一个小型的开源实用程序,不需要安装或重新启动,并且无需您自己更改注册表。

就我的实验而言,我可以在按下 Win 键后使用键盘来搜索文件/程序。此外,“开始”和“通知”菜单在我可以使用它们之前不会消失,即使使用了悬停提升选项,因为您可以为行为设置一个小的延迟(一两百毫秒就足够了),这给了您有足够的空间将指针移动到新窗口。

我已经使用了一段时间,我对它非常满意,加上bug.n平铺窗口管理器。这种设置与我在 unix 上使用 dwm 的情况非常接近。


小智 32

下面的 powershell 脚本应该和 XMouse 程序有同样的效果......而不必执行第 3 方二进制文件

代码:

$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)
Run Code Online (Sandbox Code Playgroud)

这里检索的常量


小智 17

问题链接中提到的注册表修改确实适用于 Windows 10。但是,似乎必须在辅助功能设置中选择“通过将鼠标悬停在其上来激活窗口”选项时进行修改。此选项可以在 控制面板 > 轻松访问 > 更改鼠标的工作方式下找到

此选项还会使 Windows 自动提升,但注册表修改会阻止此行为。

如果您遇到同样的问题,该复选框选中,取消选中它,点击应用,再选择它,并重新进行修改。下次登录时,鼠标应该可以正常工作。

  • 然而,正如名字所暗示的那样 - 自动升起窗户。OP 希望它不会升起,但仍允许将焦点放在背景窗口上。按照 Q 的 Winaero 说明(将第一个十六进制代码设置为 9F)并登录和注销似乎工作正常。Win键+打字=适用于搜索。如果焦点远离所述按钮,则使用鼠标 + 键入 = 的 Win 按钮不适用于搜索,但如果我将鼠标悬停在按钮上,则适用。杀死 explorer.exe 并运行 userinit.exe 无法加载 reg 设置,因此似乎需要注销。 (4认同)

Mat*_*ijs 12

Windows 实际上有一个标志来启用焦点跟随鼠标(“活动窗口跟踪”),它可以通过可怕的“SystemParametersInfo” Win32 API 调用轻松启用。有第三方程序可以启用该标志,例如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 )
Run Code Online (Sandbox Code Playgroud)

  • 您好,欢迎来到超级用户。请,当你做出新的贡献时,试着在你的代码中附上一些解释。尽管您的答案似乎是正确的,但最好解释一下为什么它有效,因此如果有人想做出一些稍微不同的事情,他们可以从您的答案中获得一个起点。无论如何,感谢您与我们分享您的知识! (2认同)

and*_*ndz 2

对于那些无法通过从 UserPreferencesMask 的第一个字节中减去 40 来使其工作的人,只需从http://winaero.com/download.php?view.1796获取 WinAero Tweaker 实用程序本身

请注意,上面的问题 #1 仍然存在,但只需使用开始菜单右侧的放大镜(搜索)图标(快捷键 Window + S)即可轻松解决。获得 X-Mouse 功能只需付出很小的代价。

当我使用 WinAero Tweaker 时,我没有遇到问题 #2。