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. – Andrew Lambert Nov 19 '11 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 '11 at 7:17
  • 1
    Can somebody tell how to modify the hard coded value 51 or hook IAudioEndpointVolume::VolumeStepUp()? – C.W. Sep 19 '17 at 2:38

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 '14 at 17:54
  • 1
    3RVX doesn't seem to allow adjusting increment... – Crono May 7 '14 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)


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.


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 '19 at 20:12

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 '20 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 '20 at 4:57

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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