Чтение и установка клавиши NumLock
VAR KS : TKeyboardState;
...
GetKeyboardState(KS);
IF Odd(KS[VK_NUMLOCK]) THEN {NumLock включен}
KS[VK_NUMLOCK] := KS[VK_NUMLOCK] XOR 1; {переключение NumLock} KS[VK_NUMLOCK] := KS[VK_NUMLOCK] OR 1; {включение NumLock} KS[VK_NUMLOCK] := KS[VK_NUMLOCK] AND (NOT 1); {выключение NumLock} SetKeyboardState(KS); |
Таким же образом:
... VK_CAPITAL ... VK_SCROLL ... VK_INSERT |
Nomadic предлагает немного другой способ:
var abKeyState: array [0..255] of byte; begin GetKeyboardState( Addr( abKeyState[ 0 ] ) ); abKeyState[ VK_NUMLOCK ] := abKeyState[ VK_NUMLOCK ] or $01; SetKeyboardState( Addr( abKeyState[ 0 ] ) ); |
Slava Kostin замечает:
Вот что по этому поводу сказано в Help Delphi: Remarks Because the SetKeyboardState function alters the input state of the calling thread and not the global input state of the system, an application cannot use SetKeyboardState to set the NUM LOCK, CAPS LOCK, or SCROLL LOCK indicator lights on the keyboard. [000560]