For that last problem, I have a set of buttons that I use to note changes in machine controls where I don't have a sensor to detect that automatically. The way I use this is I tab/backtab to the next control I intend to change in advance and then it's very easy for me to hit the spacebar with one hand while making the control change with the other so that's logged accurately enough. The problem comes if I temporarily switch to another window. This causes the button to lose visual distinction.
The solution is to add a changeEvent override which calls update() on an ActivationChange event.