SendKeys (Enviar combinacion de teclas directamente al buffer del teclado)
publicado
SIMULAR SER UN TECLADO
Ejecutar combinacion de teclas directamente al buffer del teclado
He pasado un calvario antes de toparme con este magnifico codigo al que se le puede sacar mucho partido. Este post es la respuesta a otro en el que andaba buscando una funcion que insertara las teclas directamente al buffer del teclado, simulando ser una persona que presiona la tecla. Me refiero a que, con esta funcion, ya no hay que ir apuntando a la aplicacion a la que queremos enviar las teclas. Sera exactamente igual que si presionaramos nosotros mismos las teclas en el keyboard, por lo que funcionaran cosas como: ALT+TAB= display aplications, CONTROL+ALT+SUPRIMIR, es decir, cualquier cosa, sin llamada de apis constantes, unicamente una llamada API al buffer del teclado.
Private Type MOUSEINPUT
dx As Long
dy As Long
mouseData As Long
dwFlags As Long
time As Long
dwExtraInfo As Long
End Type
Private Type KEYBDINPUT
wVk As Integer
wScan As Integer
dwFlags As Long
time As Long
dwExtraInfo As Long
End Type
Private Type HARDWAREINPUT
uMsg As Long
wParamL As Integer
wParamH As Integer
End Type
Private Type GENERALINPUT
dwType As Long
xi(0 To 23) As Byte
End Type
Private Declare Function SendInput Lib "user32.dll" (ByVal nInputs As Long, pInputs As GENERALINPUT, ByVal cbSize As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Private Sub Form_KeyPress(KeyAscii As Integer)
'Print the key on the form
Me.Print Chr$(KeyAscii);
End Sub
Private Sub Form_Paint()
'Clear the form
Me.Cls
'call the SendKey-function
SendKey VK_H
SendKey VK_E
SendKey VK_L
SendKey VK_L
SendKey VK_O
End Sub
Private Sub SendKey(bKey As Byte)
Dim GInput(0 To 1) As GENERALINPUT
Dim KInput As KEYBDINPUT
KInput.wVk = bKey 'the key we're going to press
KInput.dwFlags = 0 'press the key
'copy the structure into the input array's buffer.
GInput(0).dwType = INPUT_KEYBOARD ' keyboard input
CopyMemory GInput(0).xi(0), KInput, Len(KInput)
'do the same as above, but for releasing the key
KInput.wVk = bKey ' the key we're going to realease
KInput.dwFlags = KEYEVENTF_KEYUP ' release the key
GInput(1).dwType = INPUT_KEYBOARD ' keyboard input
CopyMemory GInput(1).xi(0), KInput, Len(KInput)
'send the input now
Call SendInput(2, GInput(0), Len(GInput(0)))
End Sub[/CODE]
Dejare el tema abierto para mostrar los avances y posibles aplicaciones, puesto que veo que se le puede sacar mucho partido a esto.
Un saludo.
Featured Replies
Archivado
Este tema está ahora archivado y está cerrado a más respuestas.
SIMULAR SER UN TECLADO
Ejecutar combinacion de teclas directamente al buffer del teclado
He pasado un calvario antes de toparme con este magnifico codigo al que se le puede sacar mucho partido. Este post es la respuesta a otro en el que andaba buscando una funcion que insertara las teclas directamente al buffer del teclado, simulando ser una persona que presiona la tecla. Me refiero a que, con esta funcion, ya no hay que ir apuntando a la aplicacion a la que queremos enviar las teclas. Sera exactamente igual que si presionaramos nosotros mismos las teclas en el keyboard, por lo que funcionaran cosas como: ALT+TAB= display aplications, CONTROL+ALT+SUPRIMIR, es decir, cualquier cosa, sin llamada de apis constantes, unicamente una llamada API al buffer del teclado.
Referido del post origen donde comenzo el tema:
https://www.ayudaexcel.com/foro/macros-y-programacion-vba/8193-ejecutar-combinacion-de-teclas-desde-excel-sendkeys-llamada-otros-programas.html
Agrego el codigo, el cual ire depurando hasta que sea comodo de usar en excel:
Dejare el tema abierto para mostrar los avances y posibles aplicaciones, puesto que veo que se le puede sacar mucho partido a esto.
Un saludo.