так. примерная структура программы на псевдокоде:
WinMain
{
/*
инициализация
*/
while //основной цикл программы
{
/*
получение сообщений. Пусть сообщение хранится в msg
*/
switch(msg)
{
case WM_KEYDOWN:
//обработка
case WM_KEYUP:
//обработка
case WM_PAINT:
//обработка
case WM_TIMER:
//обработка
/*
и так далее для всех нужных сооббщений
*/
} //switch
} //while
} //WinMain
Надеюсь, отсюда видно, где и как обрабатывается клавиатура.