Autor
|
Tema: pulsaciones de teclas, fallan... (Leído 10,283 veces)
|
Hasseds
Desconectado
Mensajes: 145
|
es un juego... con estos de proteccion bajo nProtect... enviarle comando directamente no sirve... y el teclado virtual (teóricamente) envía pulsaciones a la ventana activa... el asunto es que si lo dejo automático no hace nada, sin tocar mas nada ni modificar nada hago click sobre el teclado virtual y mágicamente si funciona... (y con otro programa fuera del juego las pulsaciones por software si están funcionando) tanta posibilidad tiene un programa para saber que las pulsaciones que van a otro son reales o no :s
Private Sub Command1_Click() Dim hWnd As Long 'hWnd = FindWindow(vbNullString, "Sin título: Bloc de notas") hWnd = FindWindow(vbNullString, Text1.Text) Print hWnd Call PostMessage(hWnd, WM_KEYDOWN, VK_F1, 0&) Call PostMessage(hWnd, WM_KEYUP, VK_F1, 0&) End Sub
Probaste activando la ventana del juego (SetForegroundWindow) antes de enviar el mensaje ? Option Explicit Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long Private Const WM_KEYDOWN = &H100 Private Const WM_KEYUP = &H101 Private Const VK_SPACE = &H20 Private Const VK_F1 = &H70 Private Sub Command1_Click() Dim hWnd As Long hWnd = FindWindow(vbNullString, Text1.Text) Print hWnd Call SetForegroundWindow(hWnd) Call PostMessage(hWnd, WM_KEYDOWN, VK_F1, 0&) Call PostMessage(hWnd, WM_KEYUP, VK_F1, 0&) End Sub
|
|
« Última modificación: 9 Agosto 2011, 01:24 am por Hasseds »
|
En línea
|
Sergio Desanti
|
|
|
AlxSpy
Desconectado
Mensajes: 137
|
dudo que funcione eso de enviar pulsaciones a un juego, quise hacer algo igual a un juego , intente varias cosas pero no da resultado, pero prueba el codigo de Hasseds kizas funcione (aunque dudo), lo que se me ocurre es que hagas una DLL en otro lenguaje y lo inyectes al juego.
|
|
|
En línea
|
|
|
|
engel lex
|
Probe con setforegrownwindow, y como ya venia deduciendo, me pinto una gran paloma! xD el programa no agarra esos mensajes... también intente con teclado virtual y seteando el juego con setforegrownwindow para asegurarme que fuera la activa, y tampoco funciono algo que dice que tendre que tirarme una dll en c e inyectarla... pero no tengo la menor idea de como se hace D: asi que a leer y deseenme suerte! :s dare este caso por muerto por si a alguien alguna vez le interesa a alguien aqui dejo mi codigo Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Private Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long
Private Const WM_LBUTTONDOWN = &H201 ' botón izquierdo abajo Private Const WM_LBUTTONUP = &H202 ' izquierdo arriba dim h, h2, hw as Long
Private Sub Conectar() h2 = FindWindow(vbNullString, Text1.Text) hw = FindWindow("OSKMainClass", vbNullString) h = FindWindowEx(hw, 0&, "DirectUIHWND", vbNullString) Call SetForegroundWindow(h2) Label1.Caption = h End Sub
Private Sub click(x As Long, y As Long)
Dim q As Long Call SetForegroundWindow(h2) q = ((2 ^ 16) * y) + x 'las coordenadas pasadas como long, y por el high, x por el low Call PostMessage(h, WM_LBUTTONDOWN, &H1, q) Call PostMessage(h, WM_LBUTTONUP, &H0, q) Label1.Caption = x & ":" & y End Sub
Private Sub Num(n As Long, Optional f As Boolean) 'n es referente al numero a ser presionado y f si va a ser un F# o un # If n = 0 Then n = 10 n = 80 + (39 * n) 'calcula la posición x de los números en el teclado virtual al mínimo tamaño If f = True Then Call click(432, 123) 'posicion del Fn Sleep (500) End If Call click(n, 40)
End Sub
y para usarlo solo seria necesario Call Conectar Call Num(2, True)
|
|
« Última modificación: 9 Agosto 2011, 03:08 am por engelx »
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
AlxSpy
Desconectado
Mensajes: 137
|
usa delphi sera mas sencillo.
|
|
|
En línea
|
|
|
|
raul338
Desconectado
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
usa delphi sera mas sencillo.
Usa un teclado automatico por USB
|
|
|
En línea
|
|
|
|
engel lex
|
@raul338: realmente lo pensé! pero no tengo idea de como hacerlo! alguna info? xD (espera no me digas que te refieres a crear un dispositivo de hardware real y automatico)
@AlxSpy: delphy... se que lo he escuchado xD... pero al igual que el dispositivo usb e inyeccion de dll no se nada xD se c++ algo... xD
con respecto a la inyeccion incluso hay programas que inyectan automaticamente la dll, mi asunto es, que tipo de funciones debe llevar la dll y como invocarlas externamente :s
|
|
« Última modificación: 9 Agosto 2011, 04:02 am por engelx »
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
raul338
Desconectado
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
@raul338: realmente lo pensé! pero no tengo idea de como hacerlo! alguna info? xD (espera no me digas que te refieres a crear un dispositivo de hardware real y automatico)
Así es, Lo dije como sarcasmo diciendo de que se puede resolver con delphi (o sea, si se puede en delphi, se puede en C, en vb, en asm, etc) Probaste con sendinput? Con keybd_event tienes que llamarlo 2 veces 1 para presionar y otra para soltar. Con send input es lo mismo, pero mas actual (Microsoft recomienda no usar mas keybd_event y usar sendInput) Probaste con esos programas que graban macros? Tal vez podrías imitarlos
|
|
|
En línea
|
|
|
|
engel lex
|
programas un montón xD métodos, mouse_event deja de funcionar su el juego es ventana activa, keybd_event (aparentemente) igual, sendkeys me tira un error de permisos (solo si el juego es ventana activa) sendInput, sendmessage y postmessage, el mismo resultado, como había dicho antes... el único método virtual de pulsaciones que conseguí fue el teclado virtual, mas el juego solo las acepta si son hechas por un mouse real (es increíble que los controles del juego puedan distinguir si una aplicación externa está recibiendo mensajes o pulsaciones reales xD que segun el spy++ sin iguales) xD aunado a esto que en mi sistema el proceso es "invisible" por alguna extraña razón (el ejecutable no es visible por ningún método o programa que conozca, excepto netstat que si lo ve (el ejecutable sospechoso de ser el principal del juego), pero me entrega un pid de un programa que según todos los otros métodos no existe y esos otro programas/metodos son administrador de tareas, de recursos, tasklist, procmon, cheatengine (y sus hermanos), entre otros) y al parecer tampoco está inyectado en otro proceso porque no hay ninguno consumiendo bastas cantidades de procesador y ram... (a demas increiblemente con todo esto, el antivirus no salta!... el virus perfecto por dios! D: )
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
raul338
Desconectado
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
Esa es la tecnología de los juegos Lo único que queda es hacer un driver virtual de algún teclado y enviar por ahí las pulsaciones. Pero eso se va de las capacidades de vb (tal vez en qBasic o C++)
|
|
|
En línea
|
|
|
|
engel lex
|
insisto podría intentarlo en c, me medio defiendo ahi xD la cosa es mi falta de desconocimiento del tema y el ni si quiera saber por donde empezar...
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Simular pulsaciones del mouse
Programación Visual Basic
|
aaronduran2
|
1
|
5,384
|
24 Marzo 2008, 22:43 pm
por ((( SPAWN )))
|
|
|
enviar pulsaciones
Programación Visual Basic
|
manel92
|
5
|
3,293
|
18 Junio 2009, 03:14 am
por yovaninu
|
|
|
Enviar pulsaciones de teclas
« 1 2 »
Programación C/C++
|
s_azazel
|
10
|
11,348
|
4 Noviembre 2010, 21:40 pm
por тαптяα
|
|
|
pulsaciones teclas ignoradas
Hacking
|
engel lex
|
3
|
4,190
|
8 Agosto 2011, 14:22 pm
por engel lex
|
|
|
[VB .NET] Enviar pulsaciones API SendMessage
.NET (C#, VB.NET, ASP)
|
kub0x
|
1
|
3,769
|
17 Noviembre 2011, 22:31 pm
por seba123neo
|
|