Могу ли я захватить нажатие клавиш Capslock / Shift? - PullRequest
5 голосов
/ 13 августа 2010

Я только что обнаружил, что клавиши caps lock и shift (и, возможно, еще некоторые клавиши) влияют на все клавиатуры, подключенные к компьютеру. (одна из опасностей при тестировании программы, которую я написал, у меня всего две руки, поэтому мне понадобилось много времени, чтобы осознать такую ​​проблему) Таким образом, разделение нажатий клавиш - это хорошо, но блокировки shift / caps сводят все с ума (когда один пользователь переводит в заглавные буквы, все входные данные пользователей также пишутся с большой буквы)

Могу ли я захватить нажатие клавиш Capslock и Shift в FormKeyPress? Где-нибудь еще по этому вопросу?
Могу ли я сохранить нажатие клавиши Shift? (чтобы я мог правильно применить «shift» к соответствующему пользовательскому вводу)

Любые другие предложения по решению этой проблемы также приветствуются.

Ответы [ 3 ]

8 голосов
/ 13 августа 2010

, чтобы проверить, выключен ли сдвиг, попробуйте это:

if GetKeyState(VK_SHIFT)<0 //tests if shiftkey is down
 then ShowMessage('shift key is down'');

и чтобы определить, включена ли блокировка заглавных букв, попробуйте это:shift и capslock:

      if Odd(GetKeyState(VK_CAPITAL)) then 
            if GetKeyState(VK_SHIFT)<0 then 
            showmessage('capslock is on and shift key is down too')
           else
          showmessage('capslock is on but shift key is NOT down');

getkeystate - это функция Windows API, вы можете прочитать больше об этом здесь

2 голосов
/ 13 августа 2010

Вы можете захватить их в OnKeyDown событие

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if Key = VK_SHIFT then
    ShowMessage('Shift Pressed');

  if Key = VK_CAPITAL then
    ShowMessage('Caps Lock Pressed');
end;
1 голос
/ 28 февраля 2016
if Key = VK_SHIFT then
  ShowMessage('Shift Pressed');

должно было быть:

if shift = [ssShift] then ... 

Программа проверяет Shift: TShiftState на удержание клавиши SHIFT, а не key :word;проверяется на наличие других порядковых символов

Это не работает для CAPSLOCK - я не смог найти код.Есть только: ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble, поэтому, похоже, придется использовать в этом случае:

if Odd(GetKeyState(VK_CAPITAL)) then ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...