
Bloqueando el teclado y la entrada del mouse usando VBA
¿Alguna vez ha querido bloquear temporalmente la entrada de su usuario mientras realiza alguna operación? Bueno, VBA te ofrece esa posibilidad y eso es lo que vamos a explorar en este artículo.
La API de BlockInput nos ofrece una forma simple y conveniente de deshabilitar temporalmente la interacción del usuario con el sistema.
Basos básicos de bloqueo
Primero debemos incluir la declaración (s) de API necesaria:
#If VBA7 Then Private Declare PtrSafe Function BlockInput Lib "user32" (ByVal fBlock As Long) As Long #Else Private Declare Function BlockInput Lib "user32" (ByVal fBlock As Long) As Long #End If
Y luego podemos bloquear/bloquear las entradas simplemente haciendo:
BlockInput True
Dicho esto, la función realmente devuelve un valor de 0 si falla, por lo que es una mejor práctica usarla haciendo:
Dim Ret As Long Ret = BlockInput(True) if Ret <> 0 Then 'it worked Else 'We have a problem End If
Las limitaciones
Lamentablemente, hay una limitación colosal con el uso de esta API y ni siquiera se menciona en la documentación.
La API debe ser llamado por un proceso que se ‘ejecuta como administrador’ de lo contrario falla. Podemos usar getLasterRor () para recopilar información sobre fallas, que en el caso específico de la API se ejecuta normalmente (no ‘ejecutar como administrador’, por lo que sin provocado elevados) devuelve un «error 5: se niega el acceso».
Además, de la documentación de ayuda en la API:
- El hilo que bloqueó la entrada inesperadamente sale sin llamar a BlockInput con Fblock establecido en False. En este caso, el sistema limpia correctamente y vuelve a habilitar la entrada.
- El usuario presiona CTRL+ALT+DEL o el sistema invoca el cuadro de mensaje modal de error del sistema duro (por ejemplo, cuando un programa falla o un dispositivo falla).
Microsoft
Entonces, al final del día, la API Blockinput puede ser útil, pero solo En las condiciones correctas.
