duda con pulsasiones en el teclado

Iniciado por vivachapas, 2 Noviembre 2007, 18:18 PM

0 Miembros y 1 Visitante están viendo este tema.

vivachapas

xD este tema me supero siemrpe jeje

el tema es este queria hacer un tipo de macros con el cual x ej estando en Word pulse la L y me escriba un texto (se q Word tiene para hacer macros pero lo quiero para otros programas)
el problema es q si pulso la "L" en el programa este hace lo q tiene q hacer pero, si lo hago en Word logicamente no le llega la orden a VB.
mi duda es como hacer a q interprete todas las pulsaciones aunque sea en otro lado. pense q seria algo como un keylogger pero necesito solo algunas funciones...

desde ya muchas gracias

HaDeS, -

En un form mete esté código:
Código (vb) [Seleccionar]

Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long

Private Sub Command1_Click()
SetTimer Me.hwnd, 0, 1, AddressOf Go
End Sub

Private Sub Command2_Click()
KillTimer Me.hwnd, 0
End Sub

Con dos CommandButton, uno para parar el timer y el otro para crearlo.

y en un módulo esto:
Código (vb) [Seleccionar]

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Dim Tecla$, TeclaVieja$

Sub Go(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)
Tecla = ObtenerTecla
If Tecla <> TeclaVieja Then
TeclaVieja = Tecla
MsgBox "Tecla " & TeclaVieja & " fue pulsada."
End If
End Sub

Private Function ObtenerTecla() As String
If GetAsyncKeyState(76) Then
    ObtenerTecla = Chr$(76)
End If
End Function

El getasynckeystate funciona para todo el sistema sin importar en que ventana estes activo, el SetTimer corre un timer de 1 milisegundo ejecutando las ordenes que se encuentran dentro del sub go.
Creo que es estó a lo que te referis.

Saludos!

vivachapas

muchas gracias x la info!
entraba para decir q ya lo habia solucionado... a lo mejor no es la mejor manera pero es muy sencilla miren:

timer1 interval=1
Citar
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Private Sub Timer1_Timer()
If GetAsyncKeyState(96) = -32767 Then
msgbox "se pulso el 0 de los numeros de la izq"
End If

If GetAsyncKeyState(110) = -32767 Then
msgbox "se pulso al el "." de al lado del 0"
End If

End Sub

:D


gracias de todos modos ;)