** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - chequear teclado numérico
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradochequear teclado numérico

 Responder Responder
Autor
Mensaje
Marciana Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 20/Septiembre/2004
Localización: Argentina
Estado: Sin conexión
Puntos: 323
Enlace directo a este mensaje Tema: chequear teclado numérico
    Enviado: 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
Saludos desde la Patagonia, Argentina
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 15/Febrero/2021 a las 08:49
¿Hay algún SendKeys de por medio?
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: La Gloria
Estado: Sin conexión
Puntos: 3849
Enlace directo a este mensaje Enviado: 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
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 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.

Access Aplicaciones
Tecsys.es
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Enlace directo a este mensaje Enviado: 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

Mi web
Arriba
Marciana Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 20/Septiembre/2004
Localización: Argentina
Estado: Sin conexión
Puntos: 323
Enlace directo a este mensaje Enviado: 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....


Editado por Marciana - 15/Febrero/2021 a las 18:38
Cordialmente, Marciana
Saludos desde la Patagonia, Argentina
Arriba
Marciana Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 20/Septiembre/2004
Localización: Argentina
Estado: Sin conexión
Puntos: 323
Enlace directo a este mensaje Enviado: 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
Saludos desde la Patagonia, Argentina
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable