I suggest you use WM_CHAR as it is far easier, and because Directinput indirectly uses WM_CHAR anyway (AFAIK). By using WM_CHAR, you can save yourself the troubles of writing a system that converts Directinput keystate data to KeyPress/KeyRelease events. Moreover you need your program to resend these messages when the user holds a character key (so he can type "aaaaaa", by holding 'a'). By using WM_CHAR you get all this functionality anyway and as far as i can tell, there are no drawbacks.

Check this link for reasons not to use Directinput for keyboard and mouse.

http://www.gamedev.net/community/for...ply_id=3074105