With directinput hooks it will either work or it won't because there is not a lot to hook.
The inputs will be polled via "GetDeviceState()", or via "GetDeviceData()" for event input setups.
The polled kind if obviously easier to virtualize/emulate, luckily I've never had to do the 2nd kind it might be tricky.
Most do the polled kind. You can just keep your own array and
OR it with the real read.
Some games that use DirectInput will often use it only for mouse inputs and use WM_KEYDOWN type message for key inputs.
But then other games might use DirectInput for both.
You have to understand how "cooperative levels" work with DirectInput.
Study the "SetCooperativeLevel()" method.
You will might have to hook it and force/filter "DISCL_BACKGROUND" and "DISCL_NONEXCLUSIVE".
Also it's typical that games will act differently when in focus and out (minimized, etc).
Look at what your target does with messages WM_ACTIVATE and WM_SIZE (see:
http://blogs.msdn.com/b/jfoscoding/arch ... 86141.aspx).
You might have to patch or hook someplace to still allow inputs while minimized.