Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: vivachapas en 2 Noviembre 2007, 18:18 pm



Título: duda con pulsasiones en el teclado
Publicado por: vivachapas en 2 Noviembre 2007, 18:18 pm
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


Título: Re: duda con pulsasiones en el teclado
Publicado por: HaDeS, - en 3 Noviembre 2007, 22:35 pm
En un form mete esté código:
Código
  1. Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
  2. Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
  3.  
  4. Private Sub Command1_Click()
  5. SetTimer Me.hwnd, 0, 1, AddressOf Go
  6. End Sub
  7.  
  8. Private Sub Command2_Click()
  9. KillTimer Me.hwnd, 0
  10. End Sub
  11.  
Con dos CommandButton, uno para parar el timer y el otro para crearlo.

y en un módulo esto:
Código
  1. Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
  2. Dim Tecla$, TeclaVieja$
  3.  
  4. Sub Go(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)
  5. Tecla = ObtenerTecla
  6. If Tecla <> TeclaVieja Then
  7. TeclaVieja = Tecla
  8. MsgBox "Tecla " & TeclaVieja & " fue pulsada."
  9. End If
  10. End Sub
  11.  
  12. Private Function ObtenerTecla() As String
  13. If GetAsyncKeyState(76) Then
  14.    ObtenerTecla = Chr$(76)
  15. End If
  16. End Function
  17.  
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!


Título: Re: duda con pulsasiones en el teclado
Publicado por: vivachapas en 4 Noviembre 2007, 04:24 am
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 ;)