А NumLock зажечь пробовали?
без горящего светодиода коды для основных стрелок и на цифровой части совпадают. Но это тоже не поможет, будет двигаться тот шейп, кого двинули первым, нужно выносить перемещение из обработчика жима на таймер, а из него следить за состоянием клавиш посредством вызова GetKeyboardState для TKeyboardState