Советы по Delphi

         

Чтение и установка клавиши 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]



Содержание раздела