Same as this question but for Windows: How can I adjust by how much the sound volume changes every time I press the volume change keys?

I'm on a Windows 7 laptop. It has "volume up" and "volume down" keys on the keyboard. Pressing them changes the volume by a tiny amount. Is there a setting or registry key or something to change that amount, or will I have to install third-party software to do it?

  • I've been looking for this sort of thing off and on for years with no luck. The best I've found is to use a third-party volume control app. Nov 19, 2011 at 5:10
  • 1
    I've now installed 3RVX, which lets me adjust this and also provides a reasonable on-screen volume display. matthew.malensek.net/software
    – Angus
    Nov 20, 2011 at 7:17
  • 1
    Can somebody tell how to modify the hard coded value 51 or hook IAudioEndpointVolume::VolumeStepUp()?
    – C.W.
    Sep 19, 2017 at 2:38

7 Answers 7


Yes a third-party app seems to be the best solution.

Microsoft's response to the problem is this;

The keypresses are sent to the OS as APPCOMMAND_VOLUME_UP and APPCOMMAND_VOLUME_DOWN HID messages. These are then translated to calls to IAudioEndpointVolume::VolumeStepUp() or IAudioEndpointVolume::VolumeStepDown(); this is hardcoded to 51 steps.

Possible mitigations are to toy with the keyboard refresh rate in the Control Panel or to write an app that listens for the APPCOMMAND_VOLUME_UP HID messages and does its own thing.

Some laptop manufacturers provide a third-party application that captures special keypresses and provides OSD etc, and this might be customizable.

Otherwise I'd also recommend 3RVX as per your comments.

  • 1
    On my Windows 8.1 box, I am able to increment/decrement the volume by left-clicking the volume icon in the tool tray and then pressing the up/down arrows.
    – Bill Hoag
    Jan 8, 2014 at 17:54
  • 1
    3RVX doesn't seem to allow adjusting increment...
    – Crono
    May 7, 2014 at 14:49

In contrary to the OP my aim was to reduce the increment from 2% to 1% for my in-ear-phones. My workaround without having to install 3rd party software was to reduce the volume of the source (e.g. media player) to 50%. Since final volume = source volume * taskbar volume the 2%-steps are now effectively 1%-steps (I never need more than 20% of the max volume)


The must satisfying way I found is to use an AutoHotKey script. As you might know, AutoHotKey can intercept keyboard event and do a lot of things. The script I use is the following:

~Volume_Up::SoundSet, +8
~Volume_Down::SoundSet, -8

In my case, the default volume increment is 2. I want to make it 10, so here I add/substract 8 more units (the ~ symbol at the beginning means "do not block default action", so the default volume action, including showing the system OSD, still work as normal), and it works perfectly.

  • I approve the AutoHotkey recommendation: a lot of customization ability without the need of complex scripting.
    – Joe DF
    Sep 3, 2019 at 20:12

You can use the open source 3RVX program:

  1. Settings

  2. Hotkeys

  3. +

  4. Keys

  5. Action: Increase Volume

  6. Amount: 10 Percent

Note that 3RVX also has skins beyond what comes with the release. For example, I am using the “Windows Default” skin. What is also useful is that you can customize these skins by modifying the skin.xml file. I changed mine to increase the font size.


I also had user829755's problem (needing smaller increments instead of larger). Since this question was closed as a duplicate of this one, but I didn't get the full answer I needed there, I thought I'd extend the AutoHotkey answer to cover the case of odd volume increments:

; Fix Windows Volume:
    SoundGet, volume 
    Send {Volume_Up}
    SoundSet, volume + 1

    SoundGet, volume 
    Send {Volume_Down}
    SoundSet, volume - 1

Like Mu-Tsun Tsai's answer, this is an AutoHotkey script. One key difference is that it sends the volume command to Endpoint first (which sets the volume to the next highest/lowest even value and brings up the graphical display), then ignores the default action and overwrites the volume with the value I want.

  • This is great, but the repeated Send {Volume_Up} glitches the OSD a bit (it'll show volume changing +2 and then -1). You can instead use this snippet to display the OSD after SoundSet:
    – roim
    Nov 10, 2020 at 4:57
  • ``` try if ((shellProvider := ComObjCreate("{C2F03A33-21F5-47FA-B4BB-156362A2F239}", "{00000000-0000-0000-C000-000000000046}"))) { try if ((flyoutDisp := ComObjQuery(shellProvider, "{41f9d2fb-7834-4ab6-8b1b-73e74064b465}", "{41f9d2fb-7834-4ab6-8b1b-73e74064b465}"))) { DllCall(NumGet(NumGet(flyoutDisp+0)+3*A_PtrSize), "Ptr", flyoutDisp, "Int", 0, "UInt", 0) ,ObjRelease(flyoutDisp) } ObjRelease(shellProvider) } ```
    – roim
    Nov 10, 2020 at 4:57

My preference to solve this is Volume2! Info on the app can be found on AlternativeTo. Volume2 (volume squared) has a lot of customizability, for example allows you to change the volume with the scroll wheel and change the size of the audio volume increment, down to 1 in my case. You can also support them on the Microsoft Store.

I use Windows 11 and the AHK scripts gave me issues where it would suddenly mute at different intervals because it would recognize both changes -- system and AHK -- and when I changed the volume fast it would mute every time. The explanation is confusing but that's the jist.

@Zombo mentioned 3RVX, I tried it out and it works but has some bugs, and isn't maintained since 2017, still works though.


The only thing that worked for me was 'Volume Step Adjuster'. I also tried 3RVX, EarTrumpet, and Volume2, but none did the job.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .