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

Tema cerradoAbrir teclado en pantalla

 Responder Responder
Autor
Mensaje
pepepot Ver desplegable
Asiduo
Asiduo


Unido: 24/Noviembre/2006
Estado: Sin conexión
Puntos: 242
Enlace directo a este mensaje Tema: Abrir teclado en pantalla
    Enviado: 04/Enero/2019 a las 18:58
Hola,
Estoy intentando que al pulsar un botón se abra el teclado de windows con shell pero me arroja el error 53 en tiempo de ejecución "archivo no encontrado" ..... sin embargo, he comprobado que la ruta es correcta. Aunque le ponga para abrir la calculadora u otro programa de la misma ruta el resultado es el mismo.

Shell "C:\Windows\System32\osk.exe"

Si pongo C:\Windows\System32\osk.exe en el explorador de archivos se me abre.
Lo cual indica que la ruta es correcta.
(Windows10 Home Edition,Access 2016)

Gracias


Editado por pepepot - 04/Enero/2019 a las 19:02
Arriba
fcoval Ver desplegable
Habitual
Habitual


Unido: 19/Enero/2013
Estado: Sin conexión
Puntos: 112
Enlace directo a este mensaje Enviado: 05/Enero/2019 a las 08:36
No es mia la funcion y no recuerdo de quien era, pero por si te ayuda te la pongo.
Un Saludo

Option Compare Database

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Declare Function SetCursorPos Lib "user32" _
(ByVal X As Integer, ByVal Y As Integer) As Long

Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Private Declare Function GetWindowRect Lib "user32" _
(ByVal hwnd As Long, lpRect As RECT) As Long

Private Declare Sub mouse_event Lib "user32.dll" (ByVal dwFlags As Long, _
ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)

Private Const MOUSEEVENTF_MOVE = &H1          ' mouse move
Private Const MOUSEEVENTF_LEFTDOWN = &H2      ' left button down
Private Const MOUSEEVENTF_LEFTUP = &H4        ' left button up
Private Const MOUSEEVENTF_ABSOLUTE = &H8000   ' absolute move

Private Type POINTAPI
    X As Long
    Y As Long
End Type

Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Dim pos As RECT


Sub Sample()
    Dim Ret As Long, retval As Long
    Dim Shex As Object

    Set Shex = CreateObject("Shell.Application")
    Shex.Open ("C:\Windows\System32\osk.exe")

    Wait 1

    Ret = FindWindow("OSKMainClass", "On-Screen Keyboard")

    If Ret <> 0 Then
        GetWindowRect Ret, pos

        '~~> Get the co-ordinates of some point in titlebar
        cur_x = pos.Left + 10
        cur_y = pos.Top + 10

        '~~> New Destination (Top Left Corner of Desktop)
        dest_x = 0
        dest_y = 0

        '~~> Move the cursor to a place in titlebar
        SetCursorPos cur_x, cur_y
        Wait 1 '<~~ Wait 1 second

        '~~> Press the left mouse button on the Title Bar
        mouse_event MOUSEEVENTF_LEFTDOWN, cur_x, cur_y, 0, 0

        '~> Set the new destination. Take cursor there
        SetCursorPos dest_x, dest_y

        '~~> Press the left mouse button again to release it
        mouse_event MOUSEEVENTF_LEFTUP, dest_x, dest_y, 0, 0
        Wait 1

        MsgBox "done"

    End If
End Sub

Private Sub Wait(ByVal nSec As Long)
    nSec = nSec + Timer
    While nSec > Timer
        DoEvents
    Wend
End Sub



Con solo esto, te abre tambien el teclado, que es lo que tu habias puesto...

Sub test()

Dim Shex As Object

Set Shex = CreateObject("Shell.Application")
Shex.Open ("C:\Windows\System32\osk.exe")

End Sub




Editado por fcoval - 05/Enero/2019 a las 08:41
Arriba
pepepot Ver desplegable
Asiduo
Asiduo


Unido: 24/Noviembre/2006
Estado: Sin conexión
Puntos: 242
Enlace directo a este mensaje Enviado: 05/Enero/2019 a las 15:52
Cómo se utiliza todo ese código.
He puesto el último código,el del test en un evento de clic de un botón y no me da error, pero tampoco me abre el teclado.
Y he puesto el primer código, la parte de de declaraciones en el inicio del código del formulario y luego los procediminetos SAMPLE y WAIT y al llamar a SAMPLE en el evento clic del botón comentado me da un error
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 895
Enlace directo a este mensaje Enviado: 05/Enero/2019 a las 20:09
Otra posibilidad es usar la combinación de teclas (WIN)+(CONTROL)+O para abrir el teclado.

O si lo prefieres, crear una función que envíe la combinación por ti:

'En la sección Declaraciones del módulo:

'Indicar si mantenemos pulsadas las teclas o las soltamos:
Private Const KEYEVENTF_EXTENDEDKEY As Long = &H1   'Combinación de teclas
Private Const KEYEVENTF_KEYUP As Long = &H2         'Tecla soltada

'Código hexadecimal de cada tecla que usamos:
Private Const VK_LWIN As Long = &H5B        'Tecla Windows izquierda
Private Const VK_RWIN As Long = &H5C        'Tecla Windows derecha

Private Const VK_LCONTROL As Long = &HA2    'Tecla control izquierda
Private Const VK_RCONTROL As Long = &HA3    'Tecla control derecha

Private Const AK_O As Long = &H4F           'Letra O may?scula

'Api para enviar pulsaciones de tecla
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _
                                              bScan As Byte, ByVal dwFlags As Long, _
                                              ByVal dwExtraInfo As Long)

'La función, que luego será llamada cuando se desee:

Public Function TecladoOSK()
    keybd_event VK_LWIN, 0, KEYEVENTF_EXTENDEDKEY, 0        'Mantenemos pulsada la tecla Windows
    keybd_event VK_LCONTROL, 0, KEYEVENTF_EXTENDEDKEY, 0    'Pulsamos Control izquierdo
    keybd_event AK_O, 0, KEYEVENTF_EXTENDEDKEY, 0           'Pulsamos la tecla O
    keybd_event AK_O, 0, KEYEVENTF_KEYUP, 0                 'Soltamos la tecla O
    keybd_event VK_LCONTROL, 0, KEYEVENTF_KEYUP, 0          'Soltamos Control derecho
    keybd_event VK_LWIN, 0, KEYEVENTF_KEYUP, 0              'Soltamos tecla Windows
End Function

Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable