написать свою dll с парой экспортируемых stdcall функций. (да, dll придётся таскать с собой).
для написания можно оттолкнуться от чего то вроде вроде этого:
https://github.com/BarryReid/volumeLevels/blob/mas...
(MSDN, IMMDeviceEnumerator, IAudioEndpointVolume, CoInitialize, CoCreateInstance)
не уверен, что интерфейсами можно зарегистрировать именно колбэк на изменения, но на крайний случай - в цикле получать уровень и проверять изменения.