PDA

Ver la Versión Completa : Simular Click


kdemia
18-05-2011, 02:32:54
que tal comunidad, como el titulo lo dice necesito simular clicks desde delphi.. el tema es que tienen que ser alternativas al "mouse_event", "SendMessage" y "PostMessage" ya que ninguno de esos me funciona, el objetivo es mandar un click a un juego.. el juego muchos lo conoceran es el Global Mu Online..
pero bueno en definitiva necesito alternativas a simular clicks..

Aclaracion: Me revise todo el foro y todos los hilos refieren a esas 3 funciones..

Gracias.

Saludos.

escafandra
18-05-2011, 08:15:49
Quizás no lo revisaste todo :rolleyes:. SendInput (http://clubdelphi.com/foros/showpost.php?p=347284&postcount=7)

Saludos.

kdemia
18-05-2011, 18:31:31
uh gracias maestro estaba esperando que respondan.. jaja mira vos no lo habia visto esa funcion.. dsp la pruebo y comento resultados, ahora no puedo porque me estoy llendo a la facu.. mil gracias :D

kdemia
19-05-2011, 04:49:11
no funciono :( alguna otra idea?

ecfisa
19-05-2011, 05:56:07
Hola kdemia.

No respondí tu pregunta anteriormente por que desconocía la función que comentó escafandra, al que agradezco por desasnarme un poco más (que buena falta me hace ;)).

Pero no creí ni lo creo ahora que el problema sea el medio por el cuál le enviás el mensaje del click a la aplicación, mas bién pareciera que esta no lo está recibiendo. Es decir, ¿ Estas seguro que estás enviando el mensaje al handle correcto, al de la ventana del juego ?

Saludos.

escafandra
19-05-2011, 08:11:54
La forma correcta, actualizada y "legal" de conseguir eventos Hardware en Windows pasa por el uso de la API SendInput (http://msdn.microsoft.com/en-us/library/ms646310%28v=vs.85%29.aspx). La API mouse_event (http://msdn.microsoft.com/en-us/library/ms646260%28v=vs.85%29.aspx) debe dejar de usarse.

El envío de mensajes Windows a Handles de ventana no dispara un evento Hardware sino la respuesta que el programador implemento para ese mensaje. Parece similar pero no es lo mismo... SendInput no envía mensajes a ninguna ventana, sino al sistema en si mismo. Quien tenga el foco recibirá la entrada de teclado, siempre y cuando estemos en la misma estación de ventana y escritorio.

La forma directa de interacturar con el Hardware es leer y escribir en sus puertos, pero Windows no nos deja hacerlo directamente.

El problema, en este caso, creo que está en la autoprotección del juego en cuestión para evitar "trampas". Muy posiblemente tenga un Hook a determinadas APIs para bloquear el tema. En muchos casos esos Hooks están realizados a nivel Kernel con lo que querer saltarlos pasa por un nivel de programación mucho mas bajo. ;)


Saludos.

kdemia
19-05-2011, 17:00:12
el tema es qe existen ya programas que hacen clicks en el juego.. es mas hay un lenguaje de script llamado auto it que funcionan los clicks, el tema q lo quiero hacer en delphi, no creo q el juego bloquee las api porq es un entorno muy viejo y limitado en el cual se programo, yo creo, y no es para desmerecer tu respuesta tan concisa, que es mas por lo que dice ecfisa que no lo capta el juego, pero nose porque.. :S las teclas si llegan.. el tema es con los mouse.. :/

ecfisa
19-05-2011, 17:38:04
Hola kdemia.

También existe una gran posibilidad de que exista algún hook bloqueando el intento como dice escafandra. Podrías buscar en la web si dicen algo al respecto como para ir cercando el problema.

Lo que me parece como te dije, es que la aplicación no esta recibiendo el envío del click, ya sea por una protección, o por que no se está enviando a la misma.

Tal vez ya sepas esto, pero para obtener el handle, podés valerte de la función FindWindow.

function GetAppHandle(WndAppName: string): THandle;
begin
Result:= FindWindow(PChar(WndAppName), nil);
end;


Saludos y éxitos con los intentos.
(no dejes de contarnos como te ha ido)

kdemia
19-05-2011, 17:44:28
si, el FindWindows ya lo conocia, es mas intente con postmessage con findwindows y nada :/ es raro.. pero lo mas raro es que las teclas las envia la cosa es con el click :S hasta el mouse mueve con setcursorpos :S