Also, is there any input on which is better for mouse and keyboard input (not critical on speed just dependable) win32 or direct input. b/c direct input is a hunk of poo.
Yes, it is. Do not used DirectInput (unless you need force feedback).
For character input, WM_CHAR works just fine. It has several advantages compared to DIY-input management such as 1) always correctly adapted to active locale and 2) behavior coherent with user settings (key repetitions per second etc).
For keyboard buttons, most of the time WM_KEYUP and WM_KEYDOWN work just fine... sometimes they get stuck when switching focus and such but I don't think that's a problem in general. I haven't tried WM_INPUT for keyboard management as it looks way more complicated with no sure benefit...
I do mouse input with WM_INPUT and I can say for sure it's incredibly smoother than WM_MOUSEMOVE, especially at low resolutions (and I have a cheap 10 bucks mouse).
An interesting advantage of WM_INPUT is the ability to control keyboard status for different devices (as opposed to WM_KU and _KD). I will play with this in the future I suppose, it might be interesting.