Red de conocimiento informático - Problemas con los teléfonos móviles - ¡La función VB GetAsyncKeyState es inexacta y se utilizan palabras aleatorias! ¿Qué hacer?

¡La función VB GetAsyncKeyState es inexacta y se utilizan palabras aleatorias! ¿Qué hacer?

No debe simplemente verificar si el valor de retorno de GetAsyncKeyState es distinto de cero, porque si se presionó la tecla especificada antes de ejecutar esta función, el bit 0 del valor de retorno de esta función es 1; la clave Actualmente en el estado presionado, el bit 15 es 1. En otras palabras, la función GetAsyncKeyState puede devolver dos estados en tiempo real de una tecla en el teclado: "ha sido presionada" y "está siendo presionada". Ambos estados harán que el valor de retorno de GetAsyncKeyState sea distinto de cero, por lo que no es riguroso usar If GetAsyncKeyState(vbKeyA) Then para determinar si se presiona la tecla A, porque es probable que la tecla A se haya presionado antes de su programa. inicia Aprobado, en este caso, GetAsyncKeyState(vbKeyA) será "verdadero" tan pronto como se inicie su programa.

Por lo tanto, debe verificar si el bit 15 del valor de retorno es 1 para determinar con precisión si se está presionando la tecla:

If (GetAsyncKeyState(vbKeyA) And &H8000) = &H8000 Then

Además, existe una función API GetKeyState que solo detecta el estado actual de la clave (es decir, no detecta si la tecla ha "sido presionada"), pero aún necesita detectar si el bit 15 es 1 (el bit 0 es 1, lo que significa que la tecla de cambio está activada, es decir, tecla CapsLock, NumLock, ScrollLock):

Si (GetKeyState(vbKeyA) And &H8000) = &H8000 Then