ОБСУЖДЕНИЕ

Каким образом в программе включить Caps Lock клави

3 ответов 7,3 тыс.
Статус
Закрыто для дальнейших ответов.
Автор темы
Каким образом в программе включить Caps Lock клавиатуры.
 
Код:
procedure TMyForm.Button1Click(Sender: TObject);
Var
KeyState: TKeyboardState;
begin
GetKeyboardState(KeyState);
if (KeyState[VK_NUMLOCK] = 0) then
 KeyState[VK_NUMLOCK] := 1
else
 KeyState[VK_NUMLOCK] := 0;
SetKeyboardState(KeyState);
end;
 
Функция SetKeyboardState с CAPS LOCK не работает. Вот выдержка из WinSDK:
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.
Можно сделать с помощью функции keybd_event:
Код:
procedure TForm1.Button1Click(Sender: TObject);
Var
KeyState: TKeyboardState;
begin
GetKeyboardState(KeyState);
if (KeyState[VK_CAPITAL] = 0) then
begin
keybd_event(VK_CAPITAL, MapVirtualKey(VK_CAPITAL, 0), 0, 0);//нажать клавишу
Sleep(1);
keybd_event(VK_CAPITAL, MapVirtualKey(VK_CAPITAL, 0), KEYEVENTF_KEYUP, 0);//отпустить клавишу
end;
end;
 
[Ctrl+X]
 
Статус
Закрыто для дальнейших ответов.