如何在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- 指针功能在Windows-8-1-windows-8和Windows-7 /

但是,我遇到以下问题:

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

  2. 当您通过单击打开“开始”,“搜索”或“通知”时,它们将关闭,然后您才能与它们进行交互。

无论如何,有没有要跟随鼠标来获得可用的焦点?

有人能成功使用Win10吗?


问题1的解决方法是单击放大镜(搜索)。这个快捷键是窗口+ S.
并且Z

1
通过将ActiveWndTrkTimeout设置为更高的值,您可以避免出现问题2。WinAero Xmouse Tuner过去至少有500ms,但由于压倒性的要求,现在在WinAero Tweaker中降低到最小100ms。仍然不可能将其降低到100ms以下,但这可能有充分的理由。
andz 2015年

Answers:


33

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

据我所试验,按Win键后,可以使用键盘搜索文件/程序。另外,即使可以使用“ hover-on-hover”选项,“开始和通知”菜单也不会消失,我可以使用它们,因为您可以为行为设置一个小的延迟(一到两百毫秒就足够了),这给了您足够的空间将指针移到新窗口。

我已经使用了一段时间,我对它以及bug.n平铺窗口管理器感到非常满意。此设置与我在Unix上使用dwm时一样接近。


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运行”。您甚至可以将其添加到Task Scheduler中以在启动时启动。
Zurd

11

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

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


3
但是,顾名思义,它会自动升高窗户。OP希望它不升高,但仍允许将焦点放在背景窗口上。按照Q的Winaero指令(将第一个十六进制代码设置为9F)并登录和注销似乎还可以。快捷键+键入=可以进行搜索。如果鼠标焦点一直移到该按钮上,则用鼠标+键入=的Win按钮无法进行搜索,但是如果我将鼠标悬停在该按钮上,则不会进行搜索。终止explorer.exe并运行userinit.exe无法加载注册表设置,因此似乎需要注销。
mpag

应用注册表修改将停止自动引发。
aleixosk

6

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 )

2
您好,欢迎来到超级用户。请做出新的贡献时,请尝试在代码中提供一些解释。尽管您的答案似乎是正确的,但最好解释一下为什么会这样做,这样会更好,因此,如果有人想做一些稍有不同的事情,他们可以为您的答案提供一个起点。无论如何,感谢您与我们分享您的知识!
DGoiko

在那里,我充实了解释。
Matthijs

1
大!我很高兴成为您的第一个支持者,希望还会有更多:D
DGoiko

1

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

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

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


1

使用该方法来实现我习惯的草率鼠标行为(来自post和Windows的早期版本)。我没有遇到您遇到的问题2。您和所有人使用此注册表修改时都会遇到的问题#1并不是问题。它完全符合预期,因为您已通过此修改更改了在Windows中处理焦点的方式。使用Windows键会使鼠标进入开始菜单而不是搜索菜单,因此它会聚焦,而不是搜索菜单。因此,如果您希望使用搜索,请单击搜索栏或放大图标(取决于其外观的设置),或使用Win+ S键组合,它将做正确的事情。


0

我尚未测试Winaero,因为:

  1. 我不希望从互联网上运行未知软件。
  2. 当我将所有使用的PC从Windows 7升级到Windows 10时,Windows 7“通过用鼠标悬停在窗口上激活窗口”设置在Windows 10中仍然有效,即使似乎没有方法可以使用。在Windows 10 GUI中进行设置。

我还没有在Internet上的任何地方找到这些解决方法,因此我将在这里为其他用户提供文档。

使用以下变通办法,使在Xmouse模式下使用Windows 10变得切实可行:

  1. 通过任务栏中的应用程序图标有多个可用窗口时,切换到另一个窗口:

    尝试选择一个窗口之前,请勿单击任务栏中的应用程序图标。如果这样做,将鼠标指针移到任务栏上方时,窗口将消失。只需将鼠标悬停在应用程序图标上方,直到出现窗口,然后即可将指针移至所需的位置。

  2. 使用任务视图按钮切换到另一个虚拟桌面或应用程序:

    • 单击任务视图按钮。
    • 再次单击并按住按钮。
    • 将指针移到所需的任务或虚拟桌面中。
    • 释放鼠标按钮,然后再次单击。

注意:Windows 10“将鼠标悬停在非活动窗口上时滚动”设置是一项有用的功能(请参阅“ 开始 -> 设置 -> 设备 -> 鼠标和触摸板”)。这似乎与Xmouse功能无关,并且似乎是默认设置。


0

除非其他窗口处于活动状态,否则将Regkey HKCU \ Control Panel \ Desktop \ ActiveWndTrackTimeout设置为大于0的设置延迟时间


1
修理钥匙;这不是Trk的追踪;例如ActiveWndTrkTimeout。我不知道Track 1的功能是什么,但更改Trk一是对我有用的。
lumpynose

-2

解决Windows 10上的问题2

2)当您通过单击打开“开始”,“搜索”或“通知”时,它们将关闭,然后才能与它们进行交互。

您需要做的是:

  • Windows+X
  • 控制面板
  • 四通八达的交通网络
  • 更改鼠标的工作方式
  • 启用复选框:防止将窗口移到屏幕边缘时自动排列窗口

无需第三方软件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.