Saludos!
Es que GetKeyState() devuelve la información, mas bien, a base de bits. Pero si al resultado de esta función le sumas simplemente 127, verás que te devolverá 0, cuando el NumLock está activo, y -1, cuando no lo está.
Código Delphi
[-]
procedure TForm.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_NUMLOCK then
case (GetKeyState(VK_NUMLOCK) + 127) of
0: ShowMessage('Activo'); -1: ShowMessage('Inactivo'); end;
end;