Cerrar/esconder el teclado en pantalla o táctil por código vba para access

Estoy creando una base de datos para utilizar en un tablet con windows. Me gustaría saber como se puede ocultar el teclado táctil (tabtip.exe). He podido abrirlo con

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Sub sbx_cerrar_teclado_virtual()
ShellExecute 0, "", "tabtip.exe", "", "", 1
End Sub

Pero no soy capaz de cerrarlo o esconderlo! He intentado modificar "nShowCmd" pero ni lo minimiza, ni lo cierra...

2 respuestas

Respuesta
2

puedes cerrarlo por medio de esta función, sacada de la página del Búho: http://mvp-access.com/buho/ficheros/cierraproceso.txt 

En el código del botón para cerrarlo, o lo que sea, pones:

CierraProceso "tabtip.exe"

o, si quieres confirmar el cierre:

CierraProceso "tabtip.exe", True

En la misma web, tienes cómo hacerlo usando APIs: http://www.mvp-access.es/buho/ficheros/apiwindows.txt 

Un saludo.


Excelente!! es lo que buscaba!! muchas gracias!!!

No hay de que. Me alegra que te sirviera. Hasta otra!

Hola de nuevo!!! se me ha actualizado windows y me dejó de funcionar la función para cerrar el teclado "tabtip.exe", que me funcionaba perfectamente, alguna idea. 

pd: esta referenciado el WMI Scripting...

un saludo

'Necesita Referenciar Microsoft WMI Scripting vx.x Library
Function CierraProceso _
            ( _
            StrNombreProceso _
                As String, _
            Optional _
              DecirSINO _
                As Boolean = True _
            ) _
            As Boolean
  Dim ListaProcesos  As Object
  Dim ObjetoWMI    As Object
  Dim ProcesoConcreto    As Object
  CierraProceso = False
  Set ObjetoWMI = GetObject("winmgmts:")
  If IsNull(ObjetoWMI) = False Then
    Set ListaProcesos = ObjetoWMI.InstancesOf("win32_process")
    For Each ProcesoConcreto In ListaProcesos
      If UCase(ProcesoConcreto.Name) = UCase(StrNombreProceso) Then
        If DecirSINO Then
          If MsgBox("¿Matar el proceso " & _
               ProcesoConcreto.Name & vbNewLine & _
               "...¿Está seguro?", _
               vbYesNo + vbCritical) _
               = vbYes Then
           ProcesoConcreto.Terminate (0)
           CierraProceso = True
          End If
        Else
         ProcesoConcreto.Terminate (0)
         CierraProceso = True
        End If
     End If
    Next
  Else
  'pon aqui un msgbox con el error que se produzca
  End If
  Set ListaProcesos = Nothing
  Set ObjetoWMI = Nothing
End Function
'***************************

Pues no, ninguna idea, lo siento...

Me he dado cuenta que el problema es que me cierra el proceso bien, pero NO la ventana del teclado Tabtip. no se que que puede ser.

Lo he probado con otro programas y funciona bien, con winrar por ejemplo

Pues yo tampoco sé por qué, pero es raro que "matando" el proceso te quede la ventana abierta...

Por si suena la flauta, que no creo, pero ¿probaste a usar SendKeys para tratar de cerrarlo (Alt+F4 siempre cerró la ventana activa)?...

Pues justo lo iba a probar ahora ja ja, pero no se el ID del teclado tabtip.

pues justo lo iba a probar ahora, pero no se el ID del teclado tabtip, para mandarle el foco, porque sino me cierra access.

Por intentar ayudarte, mira si alguna de estas soluciones te sirve:

https://www.lawebdelprogramador.com/foros/Access/316725-Terminar-proceso.html 

http://microsoft.public.es.vb.narkive.com/0zDsfqw7/cerrar-aplicacion-abierta-con-shellexecute 

De este segundo enlace lo probaría primero lo del sendmessage (es otra API), que ya lo vi en más sitios...

Gracias por tu tiempo, finalmente he desinstalado la actualización de windows 10 y se ha solucionado. En fin nos quedamos con la ganas de saber que pasó.

Pues si..., pero si así te funciona de nuevo y no necesitas lo de la del windows, genial!

Respuesta
1

Excelente respuesta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas