Могу сразу посоветовать алгоритм:
есть функция GetAsyncKeyState, вот её и используй. Объявление:
- Код: Выделить всё
Declare Function GetAsyncKeyState Lib "user32" Alias "GetAsyncKeyState" (ByVal vKey As Long) As Integer
Передавай ей все коды клавиш/символов: GetAsyncKeyState(vbKeyA), например.
Возвращает она "нажатость" клавиши: 0 - не нажата, <0 - нажата.
Сделай процедуру для определения состояния всех клавиш и запускай её по таймеру с интервалом ~100 мс.
Кстати, так отслеживаются
абсолютно все нажатия клавиш, независимо от активного окна. Если иногда будет пропускать некоторые нажатия, можно уменьшить период (интервал) таймера до 50 мс.