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.

Sathyajith Bhat
  • 61,504
  • 38
  • 179
  • 264
Christian Correa
  • 3,181
  • 3
  • 15
  • 8
  • This question is for Windows. To do the same thing in Linux, you can consider [my or one of the other answers here](https://unix.stackexchange.com/a/707365/318461) – Cadoiz Dec 12 '22 at 07:59

9 Answers9

400

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 }
    
Sridhar Ratnakumar
  • 4,759
  • 10
  • 43
  • 56
Richard
  • 4,024
  • 1
  • 14
  • 2
  • 10
    In Windows 8 there is also a setting for "FlipFlopHScroll" that flips the horizontal scrolling (especially useful for Win8). – Pete Amundson Aug 02 '12 at 14:25
  • 1
    Does anyone know if adding this key to a PS/2 mouse works as well? – Alo Sep 15 '12 at 00:28
  • 99
    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 '12 at 03:28
  • I'm sure I've followed the steps in this answer before, but the machine I'm on right now does not have the HID registry folder in that location or anywhere else in the registry. It's an HP EliteBook running Windows 7. Any ideas on where else to look? – CoderDennis Mar 15 '13 at 15:04
  • 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 '13 at 06:13
  • Yay! Now my mouse works on my work PC like it does on my personal Mac!! – DemiSheep Aug 01 '14 at 14:51
  • Yes! Confirmed for Windows 8.1 build 9600 – nickolay Aug 13 '14 at 19:50
  • 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 '14 at 15:38
  • Note: you can use Regedit to find these. Just open the start menu, and type "regedit" and hit return. Then search for "flipflopwheel", and the right area in the keys should come up. – Almo Oct 27 '14 at 13:38
  • I think this answer should be re-worded to make it clear the #2 part actually implements the changes to the registry. I.e. it doesn't just "get the VID_??? number," as is stated. In other words, you probably just want to run #2 and be done with it. – Mason G. Zhwiti Dec 08 '14 at 17:13
  • 2
    I found that the FlipFlopWheel setting was missing entirely for one mouse I tried, which meant the Powershell script couldn't find it. Looking up the device instance path manually and editing the registry worked fine - I just needed to create a new REG_DWORD called FlipFlopWheel in the right place. – Weeble Apr 27 '15 at 09:12
  • 9
    Just wanted to note that this PowerShell command does indeed work in Windows 10 as well. – Bobby Aug 01 '15 at 17:30
  • 3
    @Jaykul's comment should be the accepted answer. All I had to do was paste the command in an Administrator Powershell and it worked after unplugging/re-plugging my mouse. – Bill Mote Dec 15 '15 at 22:04
  • 3
    This worked for me, although I had to figure out that I need to unplug/replug my mouse after running the command. Without that Windows (at least Win7) does not re-read the mouse config from the Registry. I think this should be included in the answer. – Czar Apr 15 '16 at 20:31
  • 1
    This worked to invert the mouse. BUT wouldn't work to set the mouse back to the original setting. I am getting this: Get-ItemProperty : Property FlipFlopWheel does not exist at path – Snowcrash Jul 26 '16 at 17:48
  • 2
    seems like if you later plug your mouse into a different USB port you will have to do this again (on Windows 10 at least) – Jack Aug 22 '16 at 19:37
  • I had to plug in my mouse on all USB-ports and those of the hub(s) first so these will have the drivers installed before i was able to use this trick for all. – Dediqated Sep 15 '16 at 19:21
  • Well, my edit was rejected (man, Stack Overflow needs to de-mean-ify the "your edit does not make this post *even a little bit* easier to read, or more helpful" stock-text ...); but could OP please line-break those really long lines with `\`` in the source-code? In every browser I've tried, they fall off the right side, which makes them really hard to sight-type when copy-paste is unavailable. – ELLIOTTCABLE Oct 26 '16 at 20:30
  • I would say that to get the VID_??? number you have an easier third option - simply click on each device and change FlipFlopWheel to 1 wherever you find a key named FlipFlopWheel. – k2col Nov 08 '16 at 03:28
  • 1
    Just doesn't work on the latest version of Windows 10 (Logitech mouse). – Dmitry Sep 09 '17 at 08:21
  • It did work for me on Windows 10 (for both the trackpad and a bluetooth mouse), but like @Snowcrash said: it didn't work when I tried to change it back to the original setting again. Solution for me was from @Almo - using regedit and searching for `flipflopwheel` (Note you have to Ctrl+f and click "Find next" multiple times to find all of the relevant keys - I had about 6). – jackocnr Sep 14 '17 at 09:25
  • In Windows 7 I added the FlipFlopHScroll key and set its value to 1. Inverted horizontal scrolling works now too. It requires a reboot I believe. – Samuel Jan 19 '18 at 16:42
  • 2
    +1 for the line `Reboot or replug mouse for changes to take effect.`. – Prasanna Apr 09 '18 at 09:00
  • I got Windows-10 and a Bluetooth mouse. Instead of plug out and in, I have to disconnect and reconnect it in the Bluetooth preferences. After reconnect, there is a new registry entry with the last digit counted up. (In the style: "{01234567-0124-0125-0126-0127456789ab}_Dev_VID&012845_PID&0129_REV&012a_012b456789ab" while after reconnect it ends "…12b456789ac".) The new entry has set FlipFlopWheel to 0, so it doesn't work. Any Ideas for Bluetooth? – Peter Jul 12 '18 at 12:53
  • 1
    In the second line of this answer, the registry path should be `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\HID\VID_???\*\Device Parameters` with a description of what that asterisk is. The path does not have a double `VID_???` structure. – yeliabsalohcin Nov 01 '20 at 23:56
  • 1
    *Why* is this not a user setting? It should not depend on the machine, mouse and USB-port (?!), but on the user's preference! – Michel de Ruiter Dec 08 '21 at 11:55
  • Does not work for PS/2 mouses. I had it working for USB mouse, added same param for PS/2 but no luck – llamerr Jan 14 '22 at 20:10
  • This worked for me in Windows 11. – Flimm Feb 01 '22 at 08:15
  • As of 2023 Windows 10 seems to be ignoring this registry setting with a Bluetooth mouse. Any ideas? – Garret Wilson Jul 28 '23 at 16:43
66

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
Sharken
  • 1,651
  • 11
  • 6
  • 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! – Christian Correa Jul 15 '11 at 19:07
  • This one works best if your access policy prohibits editing the registry. Great idea! – mattmc3 Jan 22 '14 at 20:08
  • 1
    +1 For my Windows 7 installation this was the answer that allowed me to invert horizontal scrolling. – Chris Schiffhauer Feb 17 '14 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 08 '15 at 23:59
  • You don't even have to install ahk, an executable file (`.exe` compiled from Autohotkey) can be run anywhere. – Cadoiz Dec 06 '22 at 11:16
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.

Dov
  • 655
  • 2
  • 8
  • 19
  • 3
    v2.2 has an "invert mouse wheel scrolling" on the "Scrolling & Navigation" tab. – Lars Truijens Nov 14 '11 at 20:26
  • I installed [X-Mouse Button Control](http://www.highrez.co.uk/downloads/XMouseButtonControl.htm) on my Windows 7 and scrolling is now reversed. Works perfect. Same direction as my home Mac with OS X Lion. – Magnus Aug 02 '11 at 07:11
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, this is the source code that actually does the flipping the registry setting (<100 lines).

For those just wanting to 'get it done', here is the executable (asks for UAC elevation)

Cadoiz
  • 519
  • 3
  • 10
Jamie Pate
  • 299
  • 2
  • 4
  • 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 '15 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 '15 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!

Chris Cirefice
  • 297
  • 1
  • 6
  • 17
  • That worked like a charm with Bootcamp and Windows 10! – Anytoe Jul 23 '17 at 16:40
  • As pete mentioned, starting with Windows 8 there is also FlipFlopHScroll for horizontal scrolling. @TheConstructor [Here's a link to Pete's comment.](https://superuser.com/questions/310681/inverting-direction-of-mouse-scroll-wheel/1142585#comment534127_364353) TheConstructor also gave this hint. You can get this by right-clicking on the timestamp. – Cadoiz Dec 06 '22 at 11:38
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.

  • 3
    Just for clarity: Mouse and Keyboard Center comes with Microsoft hardware and is unrelated to Macs. – Louis Waweru Nov 02 '12 at 06:34
  • 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 '13 at 22:34
  • 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. – Kenneth Laskoski Feb 09 '13 at 06:45
  • For Windows 8, the best way is to install Microsoft Mouse and Keyboard Center from http://www.microsoft.com/hardware/en-us/downloads/mouse-keyboard-center, and then use the "Flip Scrolling Direction" option in the basic settings for your mouse. Louis mentioned this in passing above, and it worked perfectly on my Surface Pro. – David Smith May 08 '15 at 15:41
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!

Ryan_S
  • 664
  • 7
  • 15
1

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!

Michel de Ruiter
  • 1,118
  • 13
  • 23
  • 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? – Aaron Wallentine May 24 '22 at 19:05
  • 1
    No restart necessary. Only replugging. Or USBDeview as mentioned. – Michel de Ruiter May 25 '22 at 22:53
  • I used the first 3 lines and turned my wireless mouse off and back on. Presto! – hBrent Jun 30 '23 at 13:49
0

FTR: Converting the comments for 2015 of Fattie ( Dec 24, 2014 at 16:52 - Dec 27, 2014 at 8:58 ) to an answer.

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.} continue ...
  1. enter ... Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Enum\HID**\Device` Parameters FlipFlopWheel -EA 0 | ForEach-Object { Set-ItemProperty $_.PSPath FlipFlopWheel 1 }
  2. then enter ... Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Enum\HID**\Device` Parameters FlipFlopHScroll -EA 0 | ForEach-Object { Set-ItemProperty $_.PSPath FlipFlopHScroll 0 }
Cadoiz
  • 519
  • 3
  • 10