Là, tu part sur une solution type timer (Sans timer

).
Ce n'est pas une bonne solution. C'est du bricolage, il y a une grosse consommation de resource, et des appuis de touches peuvent échapper à ce système, qui ne fait que récupérer l'état à des instants t.
Quand l'utilisateur appuie sur une toutche, Windows génère un message et l'envoie à la fenêtre qui à le focus. Les "bons" keylogger interceptent ces messages en plaçant une routine de traitement de message en amont de celles de tous les processus. La routine mise en place est contenu dans une dll. Pour mettre en place la routine, ont appel
SetWindowsHookEx, qui prend en paramètre nottament le nom de la fonction à injecter, la dll, le type de hook... Mais les routine sont injectées dans les processus alors que l'on souhaiterais connaitres les messages au niveau de notre application. La plupart des keylogger utilisent donc à nouveau le système des messages pour envoyer les messages reçuts par les différents processus à l'application qui à mise en place le hook.