Ir al contenido


Foto

[Pregunta] Sobre envio de teclas


  • Por favor identifícate para responder
12 respuestas en este tema

#1 thearing

thearing

    Newbie

  • Miembros
  • Pip
  • 9 mensajes

Escrito 17 marzo 2009 - 04:25

Hola que tal, primeramente queria pedir disculpas a los administradores/moderadores y al staff de esta gran comunidad.
Ellos saben de que les hablo y tambien les explique el motivo, espero que me puedan disculpar, no volvera a suceder.

Bueno, a mi consulta...
Yo en visual basic, uso sendkeys para enviar pulsaciones de teclas a traves de un timer...

Me podrian ayudar a saber como es la variable en delphi?

Y tambien queria saber si existe otra forma que no sea sendkeys pero que envie pulsaciones de teclas

Muchisimas gracias
  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 17 marzo 2009 - 05:46



delphi
  1. procedure SimulateKeyDown(Key : byte);
  2. begin
  3.   keybd_event(Key, 0, 0, 0);
  4. end;
  5.  
  6. procedure SimulateKeyUp(Key : byte);
  7. begin
  8.   keybd_event(Key, 0, KEYEVENTF_KEYUP, 0);
  9. end;
  10.  
  11. procedure SimulateKeystroke(Key : byte; extra : DWORD);
  12. begin
  13.   keybd_event(Key, extra, 0, 0);
  14.   keybd_event(Key, extra,  KEYEVENTF_KEYUP,  0);
  15. end;
  16.  
  17. procedure SendKeys(s : string);
  18. var
  19.   i : integer;
  20.   flag : bool;
  21.   w : word;
  22. begin
  23. {Obtener el estado del CAPLOCK}
  24.   flag := not GetKeyState(VK_CAPITAL) and 1 = 0;
  25.  
  26. {SI ESTA ENCENDIDO APAGARLO}
  27.   if flag then
  28.   SimulateKeystroke(VK_CAPITAL, 0);
  29.  
  30.   for i := 1 to Length(s) do begin
  31.   w := VkKeyScan(s[i]);
  32.  
  33.   {If there is not an erro in the key translation}
  34.  
  35.   if ((HiByte(w) <> $FF) and (LoByte(w) <> $FF)) then begin
  36.  
  37.   {SI REQUIER PRESIONAR EL SHIFT - PRESIONARLO}
  38.   if HiByte(w) and 1 = 1 then
  39.   SimulateKeyDown(VK_SHIFT);
  40.  
  41.   {Send the VK_KEY}
  42.   SimulateKeystroke(LoByte(w), 0);
  43.  
  44.   {DEJAR DE PRESIONAR SHIFT}
  45.   if HiByte(w) and 1 = 1 then
  46.   SimulateKeyUp(VK_SHIFT);
  47.   end;
  48. end;
  49.  
  50. {if the caps lock key was on at start, turn it back on}
  51.   if flag then
  52.   SimulateKeystroke(VK_CAPITAL, 0);
  53. end;
  54.  
  55. procedure TForm1.Button1Click(Sender: TObject);
  56. begin
  57. {PONE MAYUSCULAS}
  58.   SimulateKeystroke(VK_CAPITAL, 0);
  59. end;
  60.  
  61. procedure TForm1.Button2Click(Sender: TObject);
  62. begin
  63. {CAPTURA LA PANTALLA DEL CLIPBOARD}
  64. {PRESIONANDO EL BOTON PRINTSCREEN}
  65.   SimulateKeystroke(VK_SNAPSHOT, 0);
  66. end;
  67.  
  68. procedure TForm1.Button3Click(Sender: TObject);
  69. begin
  70. {CAPTURA LA VENTANA ACTIVA}
  71. {CON PRINTSCREEN}
  72.   SimulateKeystroke(VK_SNAPSHOT, 1);
  73. end;
  74.  
  75. procedure TForm1.Button4Click(Sender: TObject);
  76. begin
  77.   Application.ProcessMessages;
  78.   Edit1.SetFocus;
  79.   SendKeys('Delphi Is RAD!');
  80. end;


  • 0

#3 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 17 marzo 2009 - 06:56

Saludos.

Puede que esto te sirva.
  • 0

#4 thearing

thearing

    Newbie

  • Miembros
  • Pip
  • 9 mensajes

Escrito 17 marzo 2009 - 07:07

Mmmm creo que se complicaron mucho, creo que necesito algo mucho mas simple...
Les doy un ejemplo en visual basic....
En un timer con intervalo 1 o el que quieras menos 0
poner
SendKeys "u"

Y eso enviaria la tecla UUUUUUUUUU muchas veces.
  • 0

#5 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 17 marzo 2009 - 08:23

Saludos.

No entiendo claramente lo que quieres lograr. El formulario tiene varios eventos donde puedes saber que tecla se ha presionado: OnKeyDown, OnKeyPress, OnKeyUp.

El componente TEdit y sus descendientes también poseen dichos eventos.

En caso de no ser lo que andas buscando, trata de explicarnos mejor (por lo menos yo no entiendo correctamente) lo que quieres hacer y así­ podemos darte mejores consejos.
  • 0

#6 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 17 marzo 2009 - 08:49

[broma]
¿Por casualidad no jugarás Argentum Online no? Porque recuerdo que la U se la usaba para potear (tomar pociones) creo.... :D
[/broma]

Bueno, el código de Enecumene deberí­a funcionar puesto que hace uso de la API apropiada. Para mandar cada cierto tiempo el orden de la tecla U basta con hacer algo como esto:



delphi
  1. keybd_event(Byte('U'),0,0,0);



Esto va en el evento OnTimer y ¡listo! Si pones el foco en un memo podrás ver que se envian u. En el TTimer le indicas el intervalo (milsegundos).

Ahora bien, si necesitas hacer que la orden se dirija hacia un control o ventana en particular eso ya es otra cosa... Si nos comentas apropiadamente tu duda te podremos ser de mayor ayuda.

Saludos,
  • 0

#7 thearing

thearing

    Newbie

  • Miembros
  • Pip
  • 9 mensajes

Escrito 18 marzo 2009 - 02:43

Siii no pense que conocian ese juego por eso no lo aclare... Exactamente eso lo que pedia, envio de teclas, especialmente de la tecla U, que por ejemplo con el 1 del teclado numerico se active un timer que mande envio de tecla U muchas veces hasta que se desactive con el 1 del teclado numerico.
  • 0

#8 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 18 marzo 2009 - 03:41

Siii no pense que conocian ese juego por eso no lo aclare... Exactamente eso lo que pedia, envio de teclas, especialmente de la tecla U, que por ejemplo con el 1 del teclado numerico se active un timer que mande envio de tecla U muchas veces hasta que se desactive con el 1 del teclado numerico.

Bueno, yo lo conozco por mi hermano ya que él lo juega. Y el mismo me pidió que le hiciera un programita para lo mismo que tu buscas... enviar muchas U :D
Yo me negué por dos motivos: 1) Va en contra de la filosofí­a del staff de Argentum Online. Es más, está claramente señalado en el reglamento de que todo uso de macros está prohibido y puede llevar al baneo de la cuenta (1). 2) No tení­a interés ni tiempo de involucrarme en ello.

(1) Esto lo se bien puesto que a mi hermano ya lo banearon dos veces por macrero.

Si aún estás interesado, hay muchos programas poblando la red de redes que permiten diseñar macros; es más... hasta algunos han sido diseñados exclusivamente para AO. No conozco sus nombres, pero no creo que te resulte difí­cil hallar alguno. Creo que esta es la manera más fácil y económica... buscar algo ya hecho.

Y si quieres hacerlo tu mismo, pues hay que hecharle ganas ;). El principal inconveniente del ejemplo que te he enviado yo es que puede "ralentizar" un poco el equipo, y notarás cierto parpadeo del cursor ya que no le da respiro a la máquina de poder atender la cola mensajes y repintar la pantalla (sobre todo si el intervalo es demasiado pequeño). La solución: añadir una segunda lí­nea: Application.ProcessMessages.

Ahora bien, para que funcione además deberás tener en foco o en plano el juego. Aquí­ tienes dos opciones: dejar minimizado el programa para que sea el AO quien detecte los teclazos, o bien hacer que el sistema quede en la SysTrayBar (al costado del "relojito", por si no se me entiende). De otro modo será el mismo sistema quien reciba los teclazos.

Por el tema de que con el 1 deshabilites y habilites... eso no creo que sea mucho problema:
1) Propiedad KeyPreview del form en TRUE
2) En el evento OnKeyPress detectar la tecla 1 del teclado numérico, y actuar en consecuencia... algo así­:



delphi
  1. Timer1.Enabled := NOT Timer1.Enabled;



Tal vez otros compañeros puedan comentar algo más al respecto.

Saludos,

PD: No me hago responsable de lo que le suceda a tu cuenta de AO.
  • 0

#9 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 18 marzo 2009 - 07:52

Saludos.

Vaya es la primera vez que veo a alguien pidiendo ayuda para "hackear" un juego, y más sorprendente para mi que sea de esa manera para enviar pulsaciones al juego.

No me siento mal por brindar mi ayuda [off-topic]si es que sirve lo que digo[/off-topic] pero es la primera ocasión que me sucede.  Hace unos años yo jugaba en NES, SNES, PS1, PS2 y me parecí­an bien.......
  • 0

#10 thearing

thearing

    Newbie

  • Miembros
  • Pip
  • 9 mensajes

Escrito 18 marzo 2009 - 08:00

Weno tampoco es hackear... es un simple autopots, osea un programa que toma posiones solo...

Me podrian ayudar? :p
  • 0

#11 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 18 marzo 2009 - 08:45

Weno tampoco es hackear... es un simple autopots, osea un programa que toma posiones solo...

Me podrian ayudar? :p


Bueno, yo creo que ya tienes todos los elementos para hacer tu AUTOPOTS, es cosa de que leas con detenimiento y verás que ya te contestaron lo que necesitas.

Salud OS
  • 0

#12 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 18 marzo 2009 - 09:05

Weno tampoco es hackear... es un simple autopots, osea un programa que toma posiones solo...

Me podrian ayudar? :p

thearing,
Con el debido respecto te digo que aquí­ no vemos con buenos ojos estas cosas.  No lo tomes a mal si alguien no se toma el tiempo para ayudarte. Además cada uno tiene sus obligaciones laborales y personales.

Tal vez se trata como dices, de tomar pociones para tener un poco más de maná o de curarse la vida... tal vez nos digas que se trata de un simple juego... pero de todas formas lo que buscas viola la buena ética y filosofí­a de quienes se han tomado la libertad, tiempo y han invertido dinero en el desarrollo y mantenimiento del juego (más aun sabiendo que es de código libre). Al menos eso es lo que yo opino.

¿Sabí­as que el uso indiscriminado de esas "macros" no sólo te perjudican a ti sino a los demás que juegan y al mismo servidor? ¿Sabes lo que es el lag? Cuanto más pulsaciones se enví­en, más ordenes se encolan, más tarda el sistema en atender al aplicativo y más se demora en atender las ordenes que viajan por red... multiplicando por miles de usuarios tenemos un mal desempeño del juego, en tu equipo, en el de los demás usuarios y el del servidor que tanto cuesta mantener activo 24/7.

Te hemos ayudado y te hemos dado los apuntes y datos necesarios para que por ti mismo puedas continuar. No creo que tengas mayores dificultades en unir las ideas. Parte del trabajo de un programador o desarrollador es saber aprender a unir las piezas.

Aquí­ no hacemos la "tarea" a nadie, o al menos lo evitamos. Preferimos invitar al que tiene duda a pensar, le proponemos alternativas, opiniones, y lo guiamos a que por si mismo pueda continuar.

Por mi parte no esperes demasiada ayuda, no estoy a favor de estas acciones. Por más que no sea hackear. Me parece una falta de respeto hacia una comunidad entera que disfruta del juego bien, y a la comunidad que se encarga de mantenerlo.

Y como he dicho, considero que te hemos dado los detalles necesarios. Tanto enecumene, Rolphy Reyes y yo hemos brindado información.

Me gustarí­a volver a verte por aquí­, y que no haya malos entendidos. Considero que se puedes aprender muchas cosas.

Saludos,
  • 0

#13 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 19 marzo 2009 - 06:46


Weno tampoco es hackear... es un simple autopots, osea un programa que toma posiones solo...

Me podrian ayudar? :p

thearing,
Con el debido respecto te digo que aquí­ no vemos con buenos ojos estas cosas.  No lo tomes a mal si alguien no se toma el tiempo para ayudarte. Además cada uno tiene sus obligaciones laborales y personales.

Tal vez se trata como dices, de tomar pociones para tener un poco más de maná o de curarse la vida... tal vez nos digas que se trata de un simple juego... pero de todas formas lo que buscas viola la buena ética y filosofí­a de quienes se han tomado la libertad, tiempo y han invertido dinero en el desarrollo y mantenimiento del juego (más aun sabiendo que es de código libre). Al menos eso es lo que yo opino.

¿Sabí­as que el uso indiscriminado de esas "macros" no sólo te perjudican a ti sino a los demás que juegan y al mismo servidor? ¿Sabes lo que es el lag? Cuanto más pulsaciones se enví­en, más ordenes se encolan, más tarda el sistema en atender al aplicativo y más se demora en atender las ordenes que viajan por red... multiplicando por miles de usuarios tenemos un mal desempeño del juego, en tu equipo, en el de los demás usuarios y el del servidor que tanto cuesta mantener activo 24/7.

Te hemos ayudado y te hemos dado los apuntes y datos necesarios para que por ti mismo puedas continuar. No creo que tengas mayores dificultades en unir las ideas. Parte del trabajo de un programador o desarrollador es saber aprender a unir las piezas.

Aquí­ no hacemos la "tarea" a nadie, o al menos lo evitamos. Preferimos invitar al que tiene duda a pensar, le proponemos alternativas, opiniones, y lo guiamos a que por si mismo pueda continuar.

Por mi parte no esperes demasiada ayuda, no estoy a favor de estas acciones. Por más que no sea hackear. Me parece una falta de respeto hacia una comunidad entera que disfruta del juego bien, y a la comunidad que se encarga de mantenerlo.

Y como he dicho, considero que te hemos dado los detalles necesarios. Tanto enecumene, Rolphy Reyes y yo hemos brindado información.

Me gustarí­a volver a verte por aquí­, y que no haya malos entendidos. Considero que se puedes aprender muchas cosas.

Saludos,


Saludos.

Mejor de ahí­ no puedo pedir una explicación clara y concisa  (y) (y)

Estoy totalmente de acuerdo con tu planteamiento.
  • 0




IP.Board spam blocked by CleanTalk.