Occhio: il wParam di WM_KEYDOWN è un virtual-key code, non un normale carattere ASCII; i virtual-key codes non corrispondono esattamente ai caratteri ASCII, perché non devono mappare solo lettere e simboli, ma anche tasti funzione (e, soprattutto, molti simboli sulla tastiera non sono presenti); i virtual-key codes non fanno distinzione tra lettere maiuscole e minuscole (in effetti sulla tastiera ci sono solo lettere maiuscole) e i codici usati nell'ASCII per rappresentare le lettere minuscole qui sono impiegati per altri scopi. Tutto questo per dire che non devi inviare lettere minuscole, ma maiuscole perché vengano riconosciute correttamente. Quanto alla funzione dell'lParam, in WM_KEYDOWN si tratta di un campo di bit che contiene informazioni di vario genere sulla pressione del tasto; per ulteriori informazioni ti rimando alla MSDN (guarda sotto WM_KEYDOWN).