305

Is there a way to make a mouse scroll wheel invert its direction? I'd like to scroll upwards and have that action scroll downwards and vice-versa. There is no setting on the Mouse control panel that makes this possible.

Any pointers to a hack or a particular mouse model that has such a setting would be appreciated. I am using Windows 7.

5
  • 2
    FTR for 2015. With Windows 8. The process is precisely the following, based on Richard's answer, Pete's critical point, and some investigation! It is 100% reliable on Windows 8 machines, nothing more is needed. (1) bring up PowerShell as an administrator. {For those transitioning from a Mac: on Windows 8, mouse to bottom right, bring up the search, enter 'powershell', launch it. Right-click in the icon in the tab bar, change to admin running.} cont...
    – Fattie
    Dec 24, 2014 at 16:52
  • 3
    enter ... Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Enum\HID\*\*\Device` Parameters FlipFlopWheel -EA 0 | ForEach-Object { Set-ItemProperty $_.PSPath FlipFlopWheel 1 }
    – Fattie
    Dec 27, 2014 at 8:57
  • 2
    then enter .. Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Enum\HID\*\*\Device` Parameters FlipFlopHScroll -EA 0 | ForEach-Object { Set-ItemProperty $_.PSPath FlipFlopHScroll 0 }
    – Fattie
    Dec 27, 2014 at 8:58
  • 2
    it's extremely hard to enter those in comments :)
    – Fattie
    Dec 27, 2014 at 8:59
  • 2
    So why would you not post it as an answer when it so obviously is one? Oct 16, 2019 at 12:09

9 Answers 9

397

Quick answer

  1. Open PowerShell as administrator
  2. Run:
    Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Enum\HID\*\*\Device` Parameters FlipFlopWheel -EA 0 | ForEach-Object { Set-ItemProperty $_.PSPath FlipFlopWheel 1 }
    
  3. Reboot

Detailed explanation

There is a registry setting named FlipFlopWheel that does this!

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\HID\VID_???\VID_???\Device Parameters.

There might be multiple mouse entries. The default value for FlipFlopWheel should already be 0. Change it to 1 to invert scrolling. Reboot or replug mouse for changes to take effect.

To get the VID_??? number you have two options:

  1. Go to the mouse control panel, click the Hardware tab, then click Properties.

Now in the HID-compliant mouse Properties window click the Details tab and select the Device Instance Path property. The registry path is in there. You only have to unplug and plug back in your mouse for this to take effect.

  1. Run this in PowerShell as administrator:

     # View registry settings
     Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Enum\HID\*\*\Device` Parameters FlipFlopWheel -EA 0
    
     # Change registry settings
     # Reverse mouse wheel scroll FlipFlopWheel = 1 
     # Normal mouse wheel scroll FlipFlopWheel = 0 
     Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Enum\HID\*\*\Device` Parameters FlipFlopWheel -EA 0 | ForEach-Object { Set-ItemProperty $_.PSPath FlipFlopWheel 1 }
    

    The command for normal (non-inverted) scrolling has the 0 and 1 swapped:

     # Restore default scroll direction
     Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Enum\HID\*\*\Device` Parameters FlipFlopWheel -EA 1 | ForEach-Object { Set-ItemProperty $_.PSPath FlipFlopWheel 0 }
    
28
  • 9
    In Windows 8 there is also a setting for "FlipFlopHScroll" that flips the horizontal scrolling (especially useful for Win8). Aug 2, 2012 at 14:25
  • 98
    Don't worry about what the ??? should be, just run this in PowerShell: Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Enum\HID\*\*\Device` Parameters FlipFlopWheel -EA 0 | ForEach-Object { Set-ItemProperty $_.PSPath FlipFlopWheel 1 }
    – Jaykul
    Sep 16, 2012 at 3:28
  • 3
    How to find the correct registry key? The key must match the hardware id of your mouse. To find that: Control Panel > Device Manager > Mice... > HID-compliant mouse > right click > properties > Details > Property (dropdown) = Hardware Ids > you will see the id on 1st line, this should match one of the entries in registry above.
    – Marwan
    Jun 16, 2013 at 6:13
  • 5
    Note that the PowerShell command has to be run as administrator. It's all you have to do though, it just goes in and sets the property for every single VID_???.
    – Nelson
    Oct 25, 2014 at 15:38
  • 9
    Just wanted to note that this PowerShell command does indeed work in Windows 10 as well.
    – Bobby
    Aug 1, 2015 at 17:30
65

First install AutoHotKey. Now create a script that looks like this :

$WheelUp::
Send {WheelDown}
Return

$WheelDown::
Send {WheelUp}
Return

Save it as a .ahk file and double-click the file to run it. Now you should have inverted the mouse wheel scrolling.

All information from here, though it has been modified with the addition of the $ prefix to prevent the Send commands from being captured again by the script (which exacerbates the MaxHotkeysPerInterval issue)

Add the following to the script to invert horizontal wheel scrolling:

$WheelLeft::
Send {WheelRight}
Return

$WheelRight::
Send {WheelLeft}
Return

Scrolling with the wheel might exceed the default limit of hotkey presses in a specified time interval. By default, this is 70 hotkey presses (#MaxHotkeysPerInterval) per 2000 milliseconds (#HotkeyInterval). Add this directive to your script to increase the limit from 70 to 200 hotkey presses per interval:

#MaxHotkeysPerInterval 200
5
  • Works great. It's not perfect, every now and then it won't catch the "key" event, but as long as you keep scrolling, the very next event will be caught. The net effect is what I was looking for. So that would have to do for now, until manufacturers make this option configurable in Windows. Thanks! Jul 15, 2011 at 19:07
  • 8
    There is an option in registry as suggested by Richard.
    – tig
    Feb 1, 2012 at 15:44
  • This one works best if your access policy prohibits editing the registry. Great idea!
    – mattmc3
    Jan 22, 2014 at 20:08
  • 1
    +1 For my Windows 7 installation this was the answer that allowed me to invert horizontal scrolling. Feb 17, 2014 at 17:12
  • While this works, my M500 has a button that lets the mouse scroll fast... I've tried changing the suggested #MaxHotkeysPerInterval setting, and it still didn't work in suppressing the error message.
    – Tracker1
    Aug 8, 2015 at 23:59
31

You can also use the application X-Mouse Button Control to accomplish this. You only need to set the "Wheel Up" button to the "Scroll Window Down" command, and vice-versa. I am using this on Windows XP, but the app should work on 7 or Vista, also. It was very quick to set up, and since it's a GUI application, it was easier to use.

2
  • I installed X-Mouse Button Control on my Windows 7 and scrolling is now reversed. Works perfect. Same direction as my home Mac with OS X Lion.
    – Magnus
    Aug 2, 2011 at 7:11
  • 3
    v2.2 has an "invert mouse wheel scrolling" on the "Scrolling & Navigation" tab. Nov 14, 2011 at 20:26
19

I've written a small c# app to change the registry settings for all devices. It enumerates every device and changes the 'FlipFlopWheel' setting to 1 or 0 depending on which button you press.

the full source is available on github, the source code that actually does the flipping the registry setting (<100 lines) is here: https://github.com/jamie-pate/flipflop-windows-wheel/blob/master/Form1.cs

for those just wanting to 'get it done' here is the executable (asks for UAC elevation) https://github.com/jamie-pate/flipflop-windows-wheel/blob/master/bin/Debug/FlipWheel.exe

5
  • 4
    People usually like to read a little more about your application before downloading and running a .exe ;) Please extend your answer and write a proper introduction. Please also refrain from simply adding your link to other answers unless you really feel like it improves the answer at hand. Jul 29, 2012 at 18:22
  • 1
    The guy provided the source code for the executable, it's hardly mischievous if you feel inclined to check it, just look at it, it's a tiny script. Thanks for the script @JamiePate, it worked great. It was nice not having to tinker with the registry. Mar 4, 2014 at 1:46
  • 1
    @samayres1992 He added the extra info a day after Oliver's original comment...
    – Bob
    Sep 8, 2014 at 5:34
  • Thanks Jamie! I notice it filters on hid.mousedevice initially. Pity Razer mice don't seem to publish as such, fortunately your app allows to show all input devices. Just gets a bit cryptic...
    – Marius
    Aug 15, 2015 at 15:55
  • Just raise an issue on github with the device name string, i'll add it to the initial filter list. (I only have a logitech mouse which shows up as "@msmouse.inf,%hid.mousedevice%;HID-compliant mouse" so it'd be interesting to see what other device brands use for that string.
    – Jamie Pate
    Aug 15, 2015 at 19:56
16

Because comments are ephemeral and not to be trusted, I'm posting @Jaykul's brilliant comment on Richard's awesome answer, as an answer here.

Run Powershell as administrator, then copy/paste the following command to invert the mouse by inverting all FlipFlopWheel entries in the registry:

Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Enum\HID\*\*\Device` Parameters FlipFlopWheel -EA 0 | ForEach-Object { Set-ItemProperty $_.PSPath FlipFlopWheel 1 }

A restart will be required after launching the command!

2
  • That worked like a charm with Bootcamp and Windows 10!
    – Anytoe
    Jul 23, 2017 at 16:40
  • Don't forget Pete's comment: Starting with Windows 8 there is also FlipFlopHScroll for horizontal scrolling Apr 6, 2020 at 8:09
5

I have a Microsoft mouse attached to a bootcamped MacBook. It was easy to launch Mouse and Keyboard Center and set [Wheel->Reverse scroll direction]. Irony certainly plays a role here.

6
  • 3
    Just for clarity: Mouse and Keyboard Center comes with Microsoft hardware and is unrelated to Macs. Nov 2, 2012 at 6:34
  • Thank you, Louis! This shall not be overlooked. Nov 4, 2012 at 3:46
  • 3
    This setting does not seem to be reloaded after reboot in Win8. The setting is shown as on when you go into the dialog. But it needs to be turned off then back on to re-enable.
    – Metro
    Jan 15, 2013 at 22:34
  • Yes, I recently upgraded to Windows 8 and noticed that, too. I ended up using @Richard's method. Jan 16, 2013 at 19:56
  • Note that @Jaykul's (otherwise convenient) shortcut may not work for everyone. In my case I needed to invert the wheel in native Windows, but sometimes I open the same Windows in VirtualBox, which already takes care of mouse/keyboard input. Feb 9, 2013 at 6:45
2

Confirm again X-Mouse Button Control http://www.highrez.co.uk/downloads/XMouseButtonControl.htm is a clean and perfect solution on Windows 7 :)

1
  • 1
    What makes it clean and perfect? Can you please summarize what's in that page so your answer is still useful if it changes or becomes unavailable? Please read the help article on answering.
    – user201262
    Oct 11, 2013 at 23:33
1

There's also a handy utility for that. It has a side benefit of allowing you to scroll the window under the mouse without activating it! Awesome!

http://antibody-software.com/web/software/software/wizmouse-makes-your-mouse-wheel-work-on-the-window-under-the-mouse/

3
  • That's cool; but there's also a setting for that, at least in Windows 10 (not sure about 7 any more), called 'scroll inactive windows when I hover over them', under "Mouse" settings; no need for a separate program May 20 at 16:15
  • 1
    @AaronWallentine - anything before Win10 didn't scroll other windows. you're right it is built in now, what a world we live in.
    – Ryan_S
    May 20 at 17:37
  • Thanks for the clarification about pre-win10 versions @Ryan_S :) 3 hours ago
0

I have a small .cmd script that I run whenever I use a new mouse or in a different port:

@ECHO OFF
NET FILE > NUL 2>&1 || POWERSHELL -ex Unrestricted -Command "Start-Process -Verb RunAs -FilePath '%ComSpec%' -ArgumentList '/c \"%~fnx0\" %*'" && EXIT /b
POWERSHELL -Command "Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Enum\HID\*\*\Device Parameters' FlipFlopWheel -ErrorAction SilentlyContinue | ForEach-Object { Set-ItemProperty $_.PSPath FlipFlopWheel 1 }"
"%PUBLIC%\Software\USBDeview\USBDeview.exe" /RunAsAdmin /disable_enable_by_class 03;01;02

The NET FILE line automatically runs the script As Administrator if it isn't already.

With the last line I even don't have to unplug/replug the mouse! It does require the USBDeview executable however. If you don't want that, just remove the line and replug manually.

IMHO this should actually be a per-user Windows setting: it should not depend on the mouse or port (?!), but on the user's preference!

1
  • That looks like it could be handy; though am wary to give it a try on my work computer without thoroughly researching what each of those commands and flags does : ) Does it require a restart each time to take effect, like the "regular" registry method does? 3 hours ago

Not the answer you're looking for? Browse other questions tagged or ask your own question.