Windows 10 applying registry mouse settings

20,657

Solution 1

These settings can only be changed in a running session through the SystemParametersInfo function. (That's how the mouse settings UI makes its changes.) If you already have a mechanism that writes your desired settings to the Registry, you can follow it up with this PowerShell script to read the Registry entries and apply them with SystemParametersInfo:

Add-Type @"
using System.Runtime.InteropServices;
public class PInvoke {
    [DllImport("user32.dll")] public static extern int SystemParametersInfo(int uiAction, int uiParam, int[] pvParam, int fWinIni);
    [DllImport("user32.dll")] public static extern int SystemParametersInfo(int uiAction, int uiParam, System.IntPtr pvParam, int fWinIni);
}
"@

$mouse = Get-ItemProperty 'HKCU:\Control Panel\Mouse'

# DoubleClickHeight -> SPI_SETDOUBLECLKHEIGHT
[PInvoke]::SystemParametersInfo(0x001E, $mouse.DoubleClickHeight, $null, 0)

# DoubleClickSpeed -> SPI_SETDOUBLECLICKTIME
[PInvoke]::SystemParametersInfo(0x0020, $mouse.DoubleClickSpeed, $null, 0)

# DoubleClickWidth -> SPI_SETDOUBLECLKWIDTH
[PInvoke]::SystemParametersInfo(0x001D, $mouse.DoubleClickWidth, $null, 0)

# MouseHoverHeight -> SPI_SETMOUSEHOVERHEIGHT
[PInvoke]::SystemParametersInfo(0x0065, $mouse.MouseHoverHeight, $null, 0)

# MouseHoverTime -> SPI_SETMOUSEHOVERTIME
[PInvoke]::SystemParametersInfo(0x0067, $mouse.MouseHoverTime, $null, 0)

# MouseHoverWidth -> SPI_SETMOUSEHOVERWIDTH
[PInvoke]::SystemParametersInfo(0x0063, $mouse.MouseHoverWidth, $null, 0)

# MouseSensitivity -> SPI_SETMOUSESPEED
[PInvoke]::SystemParametersInfo(0x0071, 0, [IntPtr][int]$mouse.MouseSensitivity, 0)

# MouseThreshold1, MouseThreshold2, MouseSpeed -> SPI_SETMOUSE
[PInvoke]::SystemParametersInfo(0x0004, 0, [int[]]($mouse.MouseThreshold1, $mouse.MouseThreshold2, $mouse.MouseSpeed), 0)

# MouseTrails -> SPI_SETMOUSETRAILS
[PInvoke]::SystemParametersInfo(0x005D, $mouse.MouseTrails, $null, 0)

# SnapToDefaultButton -> SPI_SETSNAPTODEFBUTTON
[PInvoke]::SystemParametersInfo(0x0060, $mouse.SnapToDefaultButton, $null, 0)

# SwapMouseButtons -> SPI_SETMOUSEBUTTONSWAP
[PInvoke]::SystemParametersInfo(0x0021, $mouse.SwapMouseButtons, $null, 2)

First it declares the SystemParametersInfo native function—twice with slightly different signatures, because the function is strangely inconsistent about how to pass the new setting. Then the script obtains the values of the Mouse Registry key. For each (except a few, mostly sound-related, that seem vestigial), the script calls the system parameters function with the appropriate action/setting code and input format as listed in the documentation. Each call outputs a 1 if successful. When updating the last setting, the SPIF_SENDCHANGE flag (2) is passed to notify other applications that changes have been made.

Since the script gets the data from the Registry, I chose not to have it redundantly update the Registry, but if you decide to adapt the script to set specific mouse settings instead of getting them from the Registry, apply SPIF_UPDATEINIFILE to each SystemParametersInfo call by changing the last parameter from 0 to 1 or from 2 to 3.

Interestingly, the ActiveWindowTracking value is also vestigial—the setting is actually stored as part of the UserPreferencesMask in Desktop—but in case your existing script tried to use the vestigial value, this snippet will apply it for real:

# ActiveWindowTracking -> SPI_SETACTIVEWINDOWTRACKING
[PInvoke]::SystemParametersInfo(0x1001, 0, [IntPtr][int]$mouse.ActiveWindowTracking, 1)

To use the script, save it as a PS1 file, e.g. regmouse.ps1, then you can call it from a command prompt like so:

powershell -executionpolicy bypass -file regmouse.ps1

Solution 2

While registry need restart for sure, but try in this way may be it work.

Like you had done some changes in registry, than call task manager by pressing CTRl+Alt+Del. Find the Explorer and Click on End Task. If shut down screen come - - > Click Cancel. Now Select File - -> New Task - -> Enter Explorer and Click OK.

In that you got New Explorer and with recent registry settings. Hope that helps.

Taken from this source: http://www.pctools.com/guides/registry/detail/246/

Share:
20,657

Related videos on Youtube

Jethro Land
Author by

Jethro Land

Updated on September 18, 2022

Comments

  • Jethro Land
    Jethro Land over 1 year

    When I manually change any mouse settings in the registry using either regedit or PowerShell (MouseSpeed, MouseThreshold1, MouseThreshold2 MouseTrails, etc.) in the registry under

    HKEY_CURRENT_USER\Control Panel\Mouse

    Nothing applies until Windows is restarted. For example, I set MouseTrails to 6. This should turn MouseTrails setting to the second highest setting, but it isn't applied when I save the value. I restart the machine and then I have a trail following my cursor.

    How can I apply these manual mouse registry changes without restarting my computer? Is it even possible? I'm not asking how to set these values via the Control Panel; I know that these settings work just fine through that.

    For reference, I am running Windows 10 and have a Logitech G602. The Logitech software is installed in my computer but does not run on startup.

    • DavidPostill
      DavidPostill over 8 years
      Did you try logoff/logon instead of a full restart?
    • Jethro Land
      Jethro Land over 8 years
      Logoff/logon works fine because I'm editing under CURRENT_USER but I'm looking for a less intrusive method. Maybe a command in the command prompt?
  • Jethro Land
    Jethro Land over 8 years
    I should have mentioned in my original post, this method does not work.