Some people attempt to simulate keyboard input to an application by posting keyboard input messages, but this is not reliable for many reasons.
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 or the
GetAsyncKeyState function, it's going to see the "real" shift state and not the fake state that your posted messages have generated.
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, though.)