As I wrote, the only way I know of to simulate a button press is to use the diagnostics functionality of Studio. It's a little clunky, though. When you activate the emulate popup, you can't utilize any of the other functionality of Studio until you close the popup. Sometimes I'd like to examine the code while simulating button presses, but you can't browse the code while the popup is open. Often times I'll open up the code files in an editor (Emacs or Ultraedit) so that I can look through them while using diagnostics -- or so that I can have multiple views of the same code file accessible simultaneously.
I suppose one thing that could be done, would be to add a virtual device channel event to execute a do_push. That could be manipulated via telnet with the appropriate button number being extracted inside the channel event.
NetLinx Diagnostics has the identical emulator. You can run that in one window, and view your results in Studio.