Visual Basic - enviar teclas

Life is soft - evento anual de software empresarial
 
Vista:

enviar teclas

Publicado por Carlos (2 intervenciones) el 23/01/2005 18:00:35
Mira, yo soy muy novato en el tema y hay un problema que sin
duda para ti seria una tonteria pero el cual yo no puedo resolver.

Lo que tengo que hacer es un pequeño programa en Visual Basic 6.0 que me permita enviar teclas
a otra aplicación que se esté ejecutando: un juego, un procesador de textos, una calculadora, etc.

Y me encantaria saber si hay alguna forma para que aparte de teclas se pueda mover el puntero
del mouse dentro de la aplicación. Aunque dudo mucho que esto ultimo sea posible. Quizas tu puedas.

Muchisimas gracias de antemano.

Carlos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:enviar teclas

Publicado por Cecilia Colalongo (3116 intervenciones) el 23/01/2005 18:22:11
Lo que pides no es algo relativamente sencillo porque varía según las aplicaciones a las que quieras enviar las pulsaciones. Deberías utilizar BringWindowToTop para pasar la ventana que quieres hacia adelante y luego, keybd_event, por ejemplo para el Notepad:

lngHwnd = FindWindow("Notepad", "Untitled - Notepad")

BringWindowToTop lngHwnd

strProv = "Esta es una prueba"

For i = 1 To Len(strProv)
keybd_event Asc(Mid(strProv, i, 1)), 0, 0, 0
keybd_event Asc(Mid(strProv, i, 1)), 0, KEYEVENTF_KEYUP, 0
Next i

keybd_event 13, 0, 0, 0
keybd_event 13, 0, KEYEVENTF_KEYUP, 0

Las funciones son:

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

Public Declare Function BringWindowToTop Lib "user32" Alias "BringWindowToTop" (ByVal hwnd As Long) As Long

Public Declare Sub keybd_event Lib "user32" Alias "keybd_event" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Movimiento de Mouse

Publicado por Benjo (679 intervenciones) el 24/01/2005 04:45:36
Para mover el Mouse y hacer click debés usar la API mouse_event, colocando las coordenadas conforme los parámetros lo exigen. No según el sistema Operativo y el Service Pack instalado, puede no funcionar si sólo pasas valores long. Deben ser estructuras PointAPIs.

Private Type POINTAPI
x As Long
y As Long
End Type

Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Const MOUSEEVENTF_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4
Const MOUSEEVENTF_MIDDLEDOWN = &H20
Const MOUSEEVENTF_MIDDLEUP = &H40
Const MOUSEEVENTF_MOVE = &H1
Const MOUSEEVENTF_ABSOLUTE = &H8000
Const MOUSEEVENTF_RIGHTDOWN = &H8
Const MOUSEEVENTF_RIGHTUP = &H10
Private Sub Form_Activate()
'KPD-Team 1998
'URL: http://www.allapi.net/
'E-Mail: [email protected]
Do
'Simulate a mouseclick on the cursor's position
mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0&, 0&, cButt, dwEI
DoEvents
Loop
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Movimiento de Mouse

Publicado por LenEsau (1 intervención) el 31/10/2013 17:55:25
''Corregido codigo ceciliaa coralongo ya que en su codigo enviava el codigo ascii de las letras y esto esta bien pero pero no cuando las letras son minusculas

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Private Sub Command1_Click()
Inghwnd = FindWindow("Notepad", "Untitled - Notepad")
If Inghwnd = Empty Then
    Sleep (100)
   Shell "NotePad", vbNormalNoFocus
End If
Inghwnd = FindWindow("Notepad", "Untitled - Notepad")
BringWindowToTop Inghwnd
''AppActivate ("Untitled - Notepad")
strprov = "Esta Es Una Prueba"
For i = 1 To Len(strprov)
    If VBA.UCase(Mid(strprov, i, 1)) = Mid(strprov, i, 1) Then
        keybd_event vbKeyShift, 0, 0, 0
        keybd_event Asc(Mid(strprov, i, 1)), 0, 0, 0
        keybd_event Asc(Mid(strprov, i, 1)), 0, 2, 0
        keybd_event vbKeyShift, 0, 2, 0
    ElseIf VBA.LCase(Mid(strprov, i, 1)) = Mid(strprov, i, 1) Then
        keybd_event Asc(UCase(Mid(strprov, i, 1))), 0, 0, 0
        ''keybd_event Asc(Mid(strprov, i, 1)), 0, 2, 0
    End If
Next i
keybd_event 13, 0, 0, 0
keybd_event 13, 0, 2, 0
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar