Thanks! That did it! The buttons are actually a little out of order, but pretty easy to figure out.
As for Max (if it's anything like M4L, which it probably is), I figured out how to send the SysEx messages. You used the "midiout" object with the correct device selected (keylab). The weird thing is that midiout want to see sysex data formatted as a DECIMAL list, not hex. I looked up a way of converting a hex list into a decimal list, and found that "sprintf 0x%s" converts a single hex value into decimal. You can format multiple values by just adding more "0x%s" strings. So in this case, a 12-item hex list would use an object with:
"sprintf 0x%s 0x%s 0x%s 0x%s 0x%s 0x%s 0x%s 0x%s 0x%s 0x%s 0x%s 0x%s"
Throw this object between whatever is generating the hex lists (message objects in my case) and the midiout object, and you're golden!
Anyway, THANKS, this is going to be AWESOME! Here's what I'm using it for. For my keyboard performance, I've worked out a system where I run all my midi data from my keyboard to a max patch, which then splits off the notes to an IAC bus on any number of different channels. In Apple MainStage, in a particular "patch" (song), I have my different sounds set to different midi channels. That way, at the touch of a button, I can change between totally different setups of sounds, while staying within the same MainStage patch. This channel router Max patch floats on top of all other windows in a little box in the corner of the screen, and displays which setup I'm currently on. But, the problem is I always have to look at my computer screen to see which setup I'm on, I have no feedback from my keyboard. I've setup the 6 Transport buttons on the keylab to issue "program change" commands to toggle the setup change, but now I can have them light up and stay lit for the correct setup I'm on! I dunno if this makes any sense, kinda hard to explain.