Вы можете сделать это с помощью SDL (Простая библиотека DirectMedia), хотя я подозреваю, что вам может не понравиться его поведение. Когда я попробовал это, мне нужно было, чтобы SDL создал новое видеоокно (хотя оно мне и не понадобилось для моей программы), и чтобы это окно «захватывало» почти весь ввод с клавиатуры и мыши (что было хорошо для моего использования, но могло быть раздражающим или неработающим в других ситуациях). Я подозреваю, что это излишне и не стоит, если не требуется полная переносимость, в противном случае попробуйте одно из других предложенных решений.
Кстати, это даст вам возможность нажимать клавиши и отпускать события отдельно, если вы в этом заинтересованы.