GetAsyncKeyState(0x14)检查是否按下了Caps Lock

时间:2019-02-27 23:15:11

标签: c#

if (GetAsyncKeyState(0x14) == -32767)
            {
                MessageBox.Show("message");

            }

使用此代码,我可以检查是否按下了大写锁定键。但是,此代码在某些计算机上不起作用。我更改为-32768时,代码工作正常。为什么我会遇到这样的问题?

2 个答案:

答案 0 :(得分:0)

documentation指出,最低有效位用于告诉您在上一次调用GetAsyncKeyState之后是否按下了键。

答案 1 :(得分:0)

您应该只检查非零按键:

  

返回值

     

如果函数成功,则返回值指定自上次调用GetAsyncKeyState以来是否按下了该键,以及该键当前是向上还是向下。如果设置了最高有效位,则该键处于按下状态;如果设置了最低有效位,则在上一次调用GetAsyncKeyState之后按下了该键。 但是,您不应该依赖此最后一个行为; 有关更多信息,请参见“备注”。   [...]

     

备注

     

[...] 尽管返回值的最低有效位指示自上次查询以来是否已按下键,但由于Windows的抢先式多任务处理性质,另一个应用程序可以调用GetAsyncKeyState并接收严格保留返回值的最低有效位的行为,以便与16位Windows应用程序(非抢占式)兼容,并且不应依赖于此行为。 [...]
  -https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getasynckeystate