Autor
|
Tema: Generar Pulsacion ! (Leído 9,273 veces)
|
ElChispa
Desconectado
Mensajes: 12
|
Hola !, Es mi primer Post y Necesito Generar una Pulsación Por Ejemplo La "Barra espaciadora" Q es la tecla (32), Ya probé con Sendkey Pero necesito estar en Foco de esa aplicación .. y q lo mande a esa aplicación con Key_Event No la manda por q La aplicación funciona con Direct x , Leei este post http://foro.elhacker.net/programacion_vb/obtener_color-t243976.0.html y Dice "El único problema que he tenido es que SendKeys no funciona en juegos a pantalla completa. Así que busqué un poco por el foro y descubrí que con la librería AutoItX3 se puede enviar usando directamente el Direct X. Lo probé y funciona perfectamente." (VB)
|
|
|
En línea
|
|
|
|
seele
Desconectado
Mensajes: 137
|
y la pregunta es.......
|
|
|
En línea
|
|
|
|
ElChispa
Desconectado
Mensajes: 12
|
JAJAJA perdón , La pregunta es : como Simular una pulsación en una aplicación de Direct X? como hizo Spider-Net Para generarla..? Desde ya muchas gracias..
|
|
|
En línea
|
|
|
|
|
Novlucker
Ninja y
Colaborador
Desconectado
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
"El único problema que he tenido es que SendKeys no funciona en juegos a pantalla completa. Así que busqué un poco por el foro y descubrí que con la librería AutoItX3 se puede enviar usando directamente el Direct X. Lo probé y funciona perfectamente."
:http://www.autoitscript.com/autoit3/index.shtml :http://www.autoitscript.com/autoit3/docs/appendix/SendKeys.htm
Saludos
|
|
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
[D4N93R]
Wiki
Desconectado
Mensajes: 1.646
My software never has bugs. Its just features!
|
Windows Message?
|
|
|
En línea
|
|
|
|
ElChispa
Desconectado
Mensajes: 12
|
Disculpen por mi ignorancia pero no entiendo Como hacerlo todavia solo uso VB o VB.NET Otro Lenguaje nose =/, Vi esto de una web si me pueden dar una mano .. Gracias por todo Un tema difícil de verdad. Pero ya encontré una solución. Bien un poco de teoría primero.
Lo que intentaba hacer era enviar pulsaciones de teclado a un juego. ¿Cuál es el problema? El problema consiste, por lo que pude averiguar, que los juegos como este que trabajan bajo DirectX tiene su propio nivel de pulsaciones de teclado y desde el método SendKeys.send() no se puede enviar a este tipo de aplicaciones, (esto no es del todo cierto ya que funciona cuando se envía el siguiente código: SendKeys.Send("{ENTER}")).
Lo siguiente es una suposición mia, por favor no lo tomen como referencia y es sobre el "{ENTER}", creo yo que en el código del evento o de la clase SendKeys, el comando "{ENTER}" está programado a bajo nivel, ya sea porque está codificado con su valor hexadecimal y no ASCII o ya sea porque para este caso en especial quisieron que el enter fuera a cualquier aplicación. Saqué esta conclusión debido a un programa en C donde se usaba SendInput y el enter lo enviaban en hexadecimal y el resto de las teclas en su correspondiente valor ASCII o sea en byte. Como les he dicho, NO TOMEN ESTA CONCLUSIÓN COMO REFERENCIA, realmente no conozco como funciona internamente el envío de pulsaciones de teclas del framework de .NET y puedo estar totalmente equivocado, si alguien sabe el porque del funcionamiento del "{ENTER}" y no del resto de las teclas les agradecería la información.
Encontré información que habla sobre importar la librería Microsoft.DirectX.DirectInput que se encarga de trabajar con el teclado, ratón joystic, etc... para DirectX, pero el problema es que no conseguí información de cómo enviar una pulsación de tecla, (bueno, encontré algo, pero haciendo honor a la verdad, no entendí nada, ni siquiera estoy seguro de que realmente se envíe la tecla). Así que desistí del tema del uso de directX, por ahora claro, y fuí por otro camino.
Buscando en interner conseguí está aplicación AutoIt v3 que sirve para crear macros, lo que me llamó la atención al leer la documentación, es que se podía usar la librería en los proyectos .NET y es gratuito.
Instalé la aplicación, hice referencia a la librería en mi proyecto y luego probé el método para enviar la pulsación al juego, el resultado es que funciona perfecto.
Ahora lo divertido: La aplicación se llama AutoIt v3 - San Google se los encontrará en un 2 x 3. La librería se llama AutoItX3Lib.dll. Importar la librería al proyecto: imports AutoItX3Lib Instanciamos: Dim au As New AutoItX3Lib.AutoItX3 Uso del envío de pulsaciones: au.Send("t up",0) o también au.Send("t down",0) [code]Imports AutoItX3Lib Public Class Form1 Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick sTimer(TextBox2, TextBox1) End Sub Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick sTimer(TextBox4, TextBox3) End Sub Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3.Tick sTimer(TextBox6, TextBox5) End Sub Private Sub Timer4_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer4.Tick sTimer(TextBox8, TextBox7) End Sub Private Sub Timer5_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer5.Tick sTimer(TextBox10, TextBox9) End Sub Private Sub Timer6_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer6.Tick sTimer(TextBox12, TextBox11) End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Timer1.Enabled = True Timer2.Enabled = True Timer3.Enabled = True Timer4.Enabled = True Timer5.Enabled = True Timer6.Enabled = True End Sub Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click Timer1.Enabled = False Timer2.Enabled = False Timer3.Enabled = False Timer4.Enabled = False Timer5.Enabled = False Timer6.Enabled = False End Sub Private Sub sTimer(ByVal txt As TextBox, ByVal txtEnvio As TextBox) On Error Resume Next 'Se comprueba que exista texto en la caja correspondiente y que su valor sea mayor que 0... If Not (txt.Text = "") And IsNumeric(txt.Text) Then If CLng(txt.Text) > 0 Then txt.Text = CStr(CLng(txt.Text) - 1) End If Else Exit Sub End If Dim time_t As Integer time_t = CInt(txt.Text) 'Se transforma el valor de la caja de texto al tipo integer... If CInt(txt.Text) = 0 Then txt.Text = time_t.ToString() 'El valor del time_t se pasa a string y se le asigna a la caja de texto... End If Dim tiempomuerto As Integer tiempomuerto = 0 If CInt(txt.Text) = tiempomuerto Then 'Si el valor es igual a 1 entonces... Dim au As New AutoItX3Lib.AutoItX3 'Librería encargada de enviar las pulsaciones del teclado... au.Send(txtEnvio.Text + " down", 0) 'Con esta línea simulamos que estamos presionando la tecla.. 'au.Send(txtEnvio.Text + " up", 0) 'Con esta línea simulamos que estamos soltando la tecla presionada... End If End Sub End Class
au.Send(txtEnvio.text + " down") simula que se está presionando sobre la tecla. Es impor tante colocar ya sea el "down" o el "up", si no, no va a funcionar. Y por último, esta librería también permite activar la ventana, minimizar, cerrar, abrir aplicaciones, etc... Todo lo que una librería para macros debería hacer, solo hay que investigarla un poco y hacer MUCHAS PRUEBAS . Un cordial saludo a todos y que lo disfruten.[/code]
|
|
|
En línea
|
|
|
|
Novlucker
Ninja y
Colaborador
Desconectado
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
A ver si no queda claro, dices que programas en VB y VB.NET, ese code que dejas esta en VB, así que solucionado no?
Sino directamente con Autoit, que te he dejado los links antes, así como la referencia a las funciones que tienes que usar.
Saludos
|
|
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
ElChispa
Desconectado
Mensajes: 12
|
Sii Disculpame pero me olvide de decirte q Nose como importar esa Libreria.. EN VB.Net para q funcione ..
|
|
|
En línea
|
|
|
|
Novlucker
Ninja y
Colaborador
Desconectado
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
Instala Autoit, son 8Mb Saludos
|
|
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
|
|