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 |
предлагает немного другой способ:
var abKeyState: array [0..255] of byte;begin GetKeyboardState( Addr( abKeyState[ 0 ] ) );abKeyState[ VK_NUMLOCK ] := abKeyState[ VK_NUMLOCK ] or $01;SetKeyboardState( Addr( abKeyState[ 0 ] ) ); |
замечает:
Вот что по этому поводу сказано в 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]