SendKeys.cpp works great! There seemed to be some bugs in the special keys lookup, but it had no problems sending input to MAME. As a bonus, I'm now able to fully automate ZSNES as well using the Hauppauge remote, something I always thought would be impossible. It seems to lag a bit in MAME, but thats probably because MAME is sucking the CPU from the IR application. I'm attaching a program (and source) I wrote, called SimKey, which just simulates keystrokes you pass to it. Special commands are enclosed in square brackets, so you can pass arguments from irremote.ini This is the irremote.ini I use for my Hauppauge remote to control MAME. It should work fine with all models, though you may want to change the layout. [MAME] MENU={run(C:\EMU\SimKey.exe "[TAB]")} BACK={run(C:\EMU\SimKey.exe "[ESCAPE]")} GRNPOWER={run(C:\EMU\SimKey.exe "[ESCAPE]")} 1={run(C:\EMU\SimKey.exe "1")} 2={run(C:\EMU\SimKey.exe "2")} 3={run(C:\EMU\SimKey.exe "3")} 4={run(C:\EMU\SimKey.exe "4")} 5={run(C:\EMU\SimKey.exe "5")} 6={run(C:\EMU\SimKey.exe "6")} 7={run(C:\EMU\SimKey.exe "7")} 8={run(C:\EMU\SimKey.exe "8")} 9={run(C:\EMU\SimKey.exe "9")} 0={run(C:\EMU\SimKey.exe "0")} RED={run(C:\EMU\SimKey.exe "5")} GREEN={run(C:\EMU\SimKey.exe "6")} YELLOW={run(C:\EMU\SimKey.exe "7")} BLUE={run(C:\EMU\SimKey.exe "8")} CHNLUP={run(C:\EMU\SimKey.exe "[UP]")} CHNLDOWN={run(C:\EMU\SimKey.exe "[DOWN]")} VOLUP={run(C:\EMU\SimKey.exe "[RIGHT]")} VOLDOWN={run(C:\EMU\SimKey.exe "[LEFT]")} OK={run(C:\EMU\SimKey.exe "[ENTER]")} PAUSE={run(C:\EMU\SimKey.exe "p")} STOP={run(C:\EMU\SimKey.exe "[F3]")} SimKey.zip