Imprimir página | Cerrar ventana

chequear teclado numérico

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=85819
Fecha de impresión: 20/Abril/2021 a las 13:18


Tema: chequear teclado numérico
Publicado por: Marciana
Asunto: chequear teclado numérico
Fecha de publicación: 14/Febrero/2021 a las 22:41
Estimados
¿Hay alguna forma de chequear y/o bloquear el teclado numérico?
Tengo una aplicación en producción (desarrollada en Access 2016 y corre sobre windows 10). Los usuarios me dicen que sin que se den cuenta se desactiva el teclado numérico y eso produce errores porque, por ejemplo,  les cambia el registro que están operando.

En mi escenario de desarrollo he notado que esto sucede cuando la aplicación dispara un error. 

No encontré información al respecto. Gracias. M


-------------
Cordialmente, Marciana



Respuestas:
Publicado por: Mihura
Fecha de publicación: 15/Febrero/2021 a las 08:49
¿Hay algún SendKeys de por medio?

-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: lbauluz
Fecha de publicación: 15/Febrero/2021 a las 09:02
Hola Marciana.

Se que no es correcto dar la solución hecha, pero como me interesaba a mi mismo he buscado un poco y esto es lo que he encontrado

En un módulo pon lo siguiente

Public Declare PtrSafe Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer

Function GetNumlock() As Boolean
  GetNumlock = CBool(GetKeyState(vbKeyNumlock) And 1)
End Function


Sub DetectarTecladoNumerico()
    If GetNumlock() Then
      MsgBox "¡ACTIVO!"
    Else
      MsgBox "¡Inactivo!"
    End If
End Sub



con DetectarTecladoNumerico haces la prueba para ver si está activo o no

Ah, si te fijas en la declaración de la función

Public Declare PtrSafe Function 

Es para 64 bits, si lo quieres en 32 bits quita PtrSafe y déja la declaración así:
Public Declare  Function 


-------------
El Búho es un pajarraco


Publicado por: Mihura
Fecha de publicación: 15/Febrero/2021 a las 10:01
Ya que estamos, hay que empezar a acostumbrarse a diseñar para 32/64 indistintamente para ello lo mejor es declarar las funciones de esta forma:

#If Win64 Then
    Public Declare PtrSafe Function GetKeyState Lib "user32" Alias "GetKeyState" (ByVal nVirtKey As Long) As Integer
#Else
    Public Declare Function GetKeyState Lib "user32" Alias "GetKeyState" (ByVal nVirtKey As Long) As Integer
#End If


-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: xavi
Fecha de publicación: 15/Febrero/2021 a las 10:22
Yo estoy con Mihura: el SendKeys es el que dispara el "tema".

recuerdo este tema de unos 4 años atrás. La causa del problema era un SendKeys y la solución fue cambiar al de WScript, tal como me dijo entonces Mihura:

Dim ws As Object
Set ws = CreateObject("WScript.shell")
ws.SendKeys "{f1}"
Set ws = Nothing




-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: Marciana
Fecha de publicación: 15/Febrero/2021 a las 18:27
Sí hay un sendkeys. Voy a reemplazarlo, al activar un formulario enviaba un F9 para refrescar el contenido. Voy a utilizar el que propuesto. Gracias

También probé la solución de Xavi y funciona muy bien. Muchas gracias
Pero me queda una consulta:
Estimo que no existe un evento que se ejecute cuando cambia el teclado numérico entre bloqueado y activado.
Se me ocurre utilizar en cada formulario el evento asociado a bajar una tecla. Pero, ¿si el cambio no sucede por accionar una tecla? Sigo pensando.

Muchas gracias, Ibarluz (cómo te atreves a decirle pajarraco al Búho!!!), Mihura y Xavi.

Por ahora sigo pensando....


-------------
Cordialmente, Marciana


Publicado por: Marciana
Fecha de publicación: 21/Febrero/2021 a las 18:42
Implementé el procedimiento de Ibarluz y funciona. No tuve más reclamos de usuarios. Se puede cerrar el hilo. Gracias a todos! M

-------------
Cordialmente, Marciana



Imprimir página | Cerrar ventana