Фокус в том, что сама клавиатура посылает один и тот же скан-код что при включенном NumLock, что при выключенном. Определением текущего режима и передачей дальше цифры или стрелки занимается драйвер клавиатуры в операционной системе.
Так что либо программное решение, либо какая-то дорогая клавиатура, способная настраивать передаваемые скан-коды на коды верхних цифр. Но тогда при нажатии Shift эти клавиши будут выдавать спецсимволы, а не цифры.