Holy cow, I wrote a book!
Some people attempt to simulate keyboard input to an application
by posting keyboard input messages, but this is not reliable for
First of all, keyboard input is a more complicated matter than
those who imprinted on the English keyboard realize.
Languages with accent marks have dead keys,
Far East languages have a variety of Input Method Editors,
and I have no idea how complex script languages handle input.
There's more to typing a character than just pressing a key.
Second, even if you manage to post the input messages into
the target window's queue, that doesn't update the keyboard
shift states. When the code behind the window calls
the GetKeyState function
the GetAsyncKeyState function,
it's going to see the "real" shift state and not the fake
state that your posted messages have generated.
The SendInput function
was designed for injecting input into Windows.
If you use that function, then at least the shift states will be
reported correctly. (I can't help you with the complex input problem,