There’s a piece of functionality missing from Ableton Live. Say you’ve got an external device who’s knobs and other controls you’re using as input to Ableton Live through the MIDI learn functionality. This works great for controlling things like volume levels, effects parameters, etc. But oddly enough you can’t use this method to control program changes on an instrument. I searched the internet for a few hours trying to find a solution, until finally deciding to just program it myself. So a couple hours later, introducing the “RGProgram” VSTPlugin. Each time you change any one of the values (Program, Bank, Sub-bank), a MIDI program change message is sent out from the VST plugin. So you can use the routing in Ableton to send that MIDI output to whichever device(s) you’d like the program changes sent to, and map the plugin parameters to whatever MIDI controller you want.
I’ve only tested this in Ableton Live, so apologies if there are any compatibility issues.