Had a look at EventGhost code and it turned out that it calls Windows API's mixerGetLineInfo with mixer line type of MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, so understandably it does not work correctly with headphones. I wrote a simple C++ volume control app that I now call in EventGhost (Windows Command action) that uses Vista+ API to detect the current default playback device (speakers, headphones, amp) and adjust its
volume. Works a treat on my Windows 7 and Windows 10.
If anyone's interested, it's just been pushed to GitHub
. I guess there are more clever ways to do that but this is what I found most straightforward