hola , estoy haciendo u programa para sacar especiales de videojuegos y este es mi codigo
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
Si necesitas que mantenga una tecla apretada es simple en un timer pones el intervalo adentro del timer pones esto Sendkeys "Letra"
Cita de: 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 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
.
Cita de: 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 Sendkeys "Letra"
Existe un segundo parametro en Senkeys que le indica en MILISEGUNDOS el retardo... Sendkeys
Sub SendKeys(String As String, [Wait])
Miembro de VBA.Interaction
Envía pulsaciones de teclas a la ventana activa
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:
'
' /////////////////////////////////////////////////////////////
' // Autor: BlackZeroX ( Ortega Avila Miguel Angel ) //
' // //
' // Web: http://InfrAngeluX.Sytes.Net/ //
' // //
' // |-> Pueden Distribuir Este codigo siempre y cuando //
' // no se eliminen los creditos originales de este codigo //
' // No importando que sea modificado/editado o engrandecido //
' // o achicado, si es en base a este codigo //
' /////////////////////////////////////////////////////////////
' // http://infrangelux.sytes.net/Blog/index.php?option=com_content&view=article&id=6:artwait&catid=2:catprocmanager&Itemid=8
' /////////////////////////////////////////////////////////////
Option Explicit
Private Declare Function WaitMessage Lib "user32" () As Long
Enum eTime
Horas = 3600
Minutos = 60
Segundos = 1
End Enum
Public Sub Wait(ByVal vToWait&, Optional ByVal ThisWait As eTime = Segundos, Optional ByVal UseAllProc As Boolean = False)
Dim vDateE As Date
vDateE = DateAdd("s", vToWait& * (ThisWait + 0), Time)
Do While vDateE > Time
Call WaitMessage
If Not UseAllProc Then DoEvents
Loop
End Sub
Sleep 100
keybd_event VK_a, 0, 0, 0
Sleep 50
keybd_event VK_a, 0, KEYEVENTF_KEYUP, 0
Probaste eso? o prueba mas intervalos :P ya que como dices que presiona muy rapido, puedes agregarle "tiempo" :xD
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
.
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!¡.