No entiendo bien por qué la discrepancia en el funcionamiento. A mi me funciona como dice
dec. Ahora, según la documentación, la comparación tendría que hacerse así:
Código Delphi
[-]
if GetKeyState(VK_CAPITAL) and 1 = 1 then
...
Por otra parte, si lo que se desea es mostrar el estado de estas teclas en una barra de estado, yo me olvidaría del OnKeyDown y pondría un Timer que se ejecute cada 10 ms en donde haría la comprobación. De esta manera, sólo tienes que poner el código en un lugar y además el estado se reflejará correctamente aun cuando el estado de la tecla cambie por razones distintas a oprimir la tecla (al menos a mi me pasa cada tanto que la tecla NumLock se apaga luego de correr alguna aplicación).
// Saludos