【问题标题】:Can I capture Capslock / Shift key presses?我可以捕获 Capslock / Shift 按键吗?
【发布时间】:2017-05-16 23:37:32
【问题描述】:

我刚刚发现 caps lock 和 shift 键(可能还有一些键)会影响连接到计算机的所有键盘。 (测试我编写的程序的危险之一,我只有两只手,所以我花了很长时间才意识到这样的问题) 所以分开击键很好,但是移位/大写锁定会让一切变得疯狂(当一个用户转换为大写时,此时所有用户的输入也都是大写的)

我可以在 FormKeyPress 中捕获 Capslock 和 Shift 按键吗? 还有其他地方吗?
我可以保存 Shift 按键吗? (所以我可以正确地将“移位”应用于相应的用户输入)

也欢迎任何其他解决此问题的建议。

【问题讨论】:

    标签: delphi keyboard


    【解决方案1】:

    要检查 shift ley 是否关闭,请尝试以下操作:

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

    要检测大写锁定是否打开,试试这个:

    if Odd(GetKeyState(VK_CAPITAL)) //tests if caps lock is on
    then showmessage('caps lock is on');
    

    如果你想检查 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 函数,你可以阅读更多关于它的信息here

    【讨论】:

      【解决方案2】:

      您可以在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;
      

      【讨论】:

        【解决方案3】:
        if Key = VK_SHIFT then
          ShowMessage('Shift Pressed');
        

        应该有:

        if shift = [ssShift] then ... 
        

        程序测试Shift: TShiftState 是否按住 SHIFT 键, 不是key :word;检查其他序数字符

        它不适用于 CAPSLOCK - 我找不到代码。 只有:ssShiftssAltssCtrlssLeftssRightssMiddlessDouble,所以在这种情况下似乎必须使用:

        if Odd(GetKeyState(VK_CAPITAL)) then ...
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-09-19
          • 2023-03-24
          • 1970-01-01
          • 1970-01-01
          • 2023-03-18
          • 1970-01-01
          • 2014-03-28
          相关资源
          最近更新 更多