Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: z_ane_666 en 17 Noviembre 2010, 02:44 am



Título: mantener presionada tecla-api de windows
Publicado por: z_ane_666 en 17 Noviembre 2010, 02:44 am
hola , estoy haciendo u programa para sacar especiales de videojuegos y este es mi codigo

Código:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
        Const VK_forw = &H27
        Const VK_back = &H25
        Const VK_down = &H28
        Const VK_a = &H41
        Const KEYEVENTF_KEYUP = &H2
       
       
Private Sub Command1_Click()
Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
keybd_event VK_forw, 0, 0, 0
keybd_event VK_forw, 0, KEYEVENTF_KEYUP, 0
Sleep 100
keybd_event VK_back, 0, 0, 0
keybd_event VK_back, 0, KEYEVENTF_KEYUP, 0
Sleep 100
keybd_event VK_forw, 0, 0, 0
keybd_event VK_forw, 0, KEYEVENTF_KEYUP, 0
Sleep 100
keybd_event VK_down, 0, 0, 0
keybd_event VK_down, 0, KEYEVENTF_KEYUP, 0
Sleep 100
keybd_event VK_a, 0, 0, 0
keybd_event VK_a, 0, KEYEVENTF_KEYUP, 0
Timer1.Enabled = False

End Sub

al probar este codigo en un archivo de texto, funciona correctamente, pero al probarlo estando activo el juego no funciona

El problema que veo es que las teclas con esta api se presiona muy rapido, y es por eso que no reacciona el personaje

lo que quisiera saber es si se puede adaptar de tal manera que la tecla este presionada por al menos 1800 ms y que luego se suelte con KEYEVENTF_KEYUP

saludos

NOTA: probe con un bucle, funciona muy bien en archivos de texto, pero no en el juego


Título: Re: mantener presionada tecla-api de windows
Publicado por: NightMore en 17 Noviembre 2010, 02:54 am
Si necesitas que mantenga una tecla apretada es simple en un timer pones el intervalo adentro del timer pones esto
Código:
Sendkeys "Letra"


Título: Re: mantener presionada tecla-api de windows
Publicado por: z_ane_666 en 17 Noviembre 2010, 03:28 am
Si necesitas que mantenga una tecla apretada es simple en un timer pones el intervalo adentro del timer pones esto
Código:
Sendkeys "Letra"

Pero eso solamente es una funcion exclusiva de visual basic , yo quiero hacerlo con API por que es general para todo el sistema


Título: Re: mantener presionada tecla-api de windows
Publicado por: BlackZeroX en 17 Noviembre 2010, 04:43 am
.
Si necesitas que mantenga una tecla apretada es simple en un timer pones el intervalo adentro del timer pones esto
Código:
Sendkeys "Letra"

Existe un segundo parametro en Senkeys que le indica en MILISEGUNDOS el retardo... Sendkeys 

Código
  1.  
  2. Sub SendKeys(String As String, [Wait])
  3.    Miembro de VBA.Interaction
  4.    Envía pulsaciones de teclas a la ventana activa
  5.  
  6.  

Dicho paremetro es Opcional...

Cita de:  link=topic=310913.msg1543529#msg1543529 date=1289960891
Pero eso solamente es una funcion exclusiva de visual basic , yo quiero hacerlo con API por que es general para todo el sistema

SenKeys trabaja digamos que igual que el api solo que api es mas moldeable y SendKeys solo limita a la ventana activa ese es un problema en especial cuando se le quieren enviar las pulsaciones a una ventana oculta ( llamase Hwnd )

Con esto puede hacer el retardo:

Código
  1.  
  2. '
  3. '   /////////////////////////////////////////////////////////////
  4. '   // Autor:   BlackZeroX ( Ortega Avila Miguel Angel )       //
  5. '   //                                                         //
  6. '   // Web:     http://InfrAngeluX.Sytes.Net/                  //
  7. '   //                                                         //
  8. '   //    |-> Pueden Distribuir Este codigo siempre y cuando   //
  9. '   // no se eliminen los creditos originales de este codigo   //
  10. '   // No importando que sea modificado/editado o engrandecido //
  11. '   // o achicado, si es en base a este codigo                 //
  12. '   /////////////////////////////////////////////////////////////
  13. '   // http://infrangelux.sytes.net/Blog/index.php?option=com_content&view=article&id=6:artwait&catid=2:catprocmanager&Itemid=8
  14. '   /////////////////////////////////////////////////////////////
  15.  
  16. Option Explicit
  17.  
  18. Private Declare Function WaitMessage Lib "user32" () As Long
  19.  
  20. Enum eTime
  21.    Horas = 3600
  22.    Minutos = 60
  23.    Segundos = 1
  24. End Enum
  25.  
  26. Public Sub Wait(ByVal vToWait&, Optional ByVal ThisWait As eTime = Segundos, Optional ByVal UseAllProc As Boolean = False)
  27. Dim vDateE      As Date
  28.    vDateE = DateAdd("s", vToWait& * (ThisWait + 0), Time)
  29.    Do While vDateE > Time
  30.        Call WaitMessage
  31.        If Not UseAllProc Then DoEvents
  32.    Loop
  33. End Sub
  34.  
  35.  


Título: Re: mantener presionada tecla-api de windows
Publicado por: raul338 en 17 Noviembre 2010, 15:14 pm
Código
  1. Sleep 100
  2. keybd_event VK_a, 0, 0, 0
  3. Sleep 50
  4. keybd_event VK_a, 0, KEYEVENTF_KEYUP, 0
  5.  
Probaste eso? o prueba mas intervalos :P ya que como dices que presiona muy rapido, puedes agregarle "tiempo" :xD


Título: Re: mantener presionada tecla-api de windows
Publicado por: z_ane_666 en 18 Noviembre 2010, 03:29 am
muchas gracias BlackZeroX por tu codigo, ahoira tratare de adaptarlo

raul, ya habia probado lo que me pusiste y no funciona, pero igual hare de nuevo el intento con doevents, quiza algo pase XD

saludos


Título: Re: mantener presionada tecla-api de windows
Publicado por: BlackZeroX en 18 Noviembre 2010, 04:57 am
.
Sleep()

Te va a dormir el hilo actual de tu programa es decir te va a parar cualquier proceso, mientras que mi funcion Wait(), solo te va a "Dormir" el proceso actual mas no el hilo.

Dulces Lunas!¡.