Thanks everyone for your kind feedback - I think I've been inspired to put a bit more effort into this one before putting it to rest.
It was written in Java - and i purposely omitted this fact originally because a lot of people think Java sucks for performance. Now, I would not write a first person shooter in it, necessarily, but I will admit that due to performance considerations I tested a very early version before putting much effort in, and found even then that it was not using much CPU, etc. I chose Java because it's what I have primary used over the last ~15 years, so it was obviously the easiest and quickest way to make this happen. Having worked with .Net before, I'm not sure if it will do any better. .Net is also an interpreted language. And from my experience, I know there are areas in which .Net sucks terribly in comparison to Java, such as having massively worse performance within a debug build, with exception handling, and other areas. Though, my experience with .Net does not cover specifics related to this kind of app. I had thought about going all the way down to C, but the effort to relearn all the API's lacked some appeal - it also felt wrong given the preexisting products mentioned earlier are probably in C/C++ or something similar.
The Frame Rate is actually configurable. The app "sleeps" for a configured amount of time between screen refreshes. I've tried a variety, from 60fps to 10fps, all of them are very demanding on the cab, yet no option I've tried makes the desktop go over ~5% CPU. On the Mame cab, I tested without anything else running - and assumed that with such high CPU usge, Mame would suffer. (I should test this, I guess)
USB monitor is on USB ver. 2. It's a Lilliput, something like this but an older model:
http://lilliputweb.net/index.php?Controller=User_Product&action=ShowProduct&product_id=83. I would not be surprised if the system is taxed when drawing to this device due to a lack of dedicated video hardware for it, but would need to investigate more. A second video card is not an option for two reasons: the mobo is old, predates PCI, and the monitor embedded in the CP cannot easily (or cheaply) be changed to something a vid card can support. The vid card I have has dual outs, and before committing to a final CP, I tried connecting other things to it, for example, one of those rear-view mirror monitor things. The image was absolutely terrible. The CP i have now has a hole routed to the specific dimensions of this decased mini monitor, and I would really not want to start again with something else.
I'm not actually using transparency effects. Perhaps what you are noticing is the watermark left by the screen cap software? In fact, the drawing routine is fairly simple, and bits that do not change are not redrawn on each refresh. If something were to obscure the window temporarily, it could be a while before those bits got repainted again, as I chose performance over all other concerns IMHO, the most taxing bit would be the text scrolling, maybe?, since, instead of just blitting an image, the text gets redrawn for each frame (the layout, formatting and stuff are all precalc'd tho, and bits that are offscreen are not drawn, a clipping region is also put in place, etc).
I have also not mentioned....version2....an app to assist with generating static display files for MameHooker (or Marquee Magician, etc). It shows available artwork assests, lets you pick the layout, and ta-da, instant display file. It's work in progress, but maybe I should go back and investigate more how to make version 1 work. I really do prefer a dynamic, runtime generated scheme with the animations. I was also considering stuff like - well, if you look at SF2 for example, start with the instruction card zoomed out, to fit the width of the screen, the slowly zoom in to the size shown in the vid, then start the scrolling. That would be good for games like golden tee as well. And then, there are those games whose marquee is more of a advert type image (large portrait image), games with more than one instruction card, etc. I had a fair bit worked out for these cases but....
One more thing - out of laziness, it seemed the easiest way to tell to a "resident" program which game to show, was to have it listen on a socket - so things like autohotkey etc could invoke a URL, like
http://localhost/gamename (port is also configurable, fwiw) and the app would immediately switch to that game (unless there was a MameHooker display file

) That part was working quite well also, and it seemed like a good, generic way to tell it what to do. Command line is another option, but rather than start/stop the app, I thought it better if a front end could just tell it "switch to game-X now please".