elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Doble factor de autenticación o verificación en dos pasos


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Análisis y Diseño de Malware (Moderador: fary)
| | |-+  Problema enviando eventos de mouse a PC remota con C#
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema enviando eventos de mouse a PC remota con C#  (Leído 2,957 veces)
seifer2006

Desconectado Desconectado

Mensajes: 31



Ver Perfil
Problema enviando eventos de mouse a PC remota con C#
« en: 30 Mayo 2007, 21:48 »

Hola a todos. Les escribo para hacer una pequeña consulta.

La idea es que tengo una aplicación client-server en C#, que detecta todos los eventos del teclado y del mouse. Los eventos de teclado y los click del mouse se envían al server por un socket, mientras que los movimientos del mouse (las coordenadas) se envían por otro socket.

Lo que hago para enviar dichas coordenadas es formar un paquete de este estilo:

"<MOV> XcordenadaxYcordenaday\n"

en el servidor ese paquete es parseado para separar las coordenadas X Y, y se setea la posición actual del cursor en esas coordenadas.

________________________________________________

Aclaro que este programa ya está funcionando en gran parte, el mouse se mueve bien, los datos llegan bien, lo que pasa es que el movimiento del mouse no es demasiado fluido, es un poco lento.

Lo que yo quisiera saber es si hay algún otro método para poder enviar dicha información y que del lado del servidor el movimiento no se vea tan afectado (como por ejemplo con VNC o un remote desktop comun).

Tambien especifico que lo que quiero hacer no es un control remoto (de hecho ya conozco algunas librerias para utilizar en C# para implementar un control remoto donde el movimiento se ve bien fluido), lo que yo quiero es que las acciones que realizo en una PC, se realicen del lado del servidor al mismo tiempo (no mas tarde grabando una macro, sino al mismo tiempo).

Cualquier informacion o idea para mejorar el programa o fuentes para leer serían de gran utilidad. Cualquier otra informacion me avisan.

Muchas gracias!
En línea

Hendrix
In The Kernel Land
Colaborador
***
Desconectado Desconectado

Mensajes: 2.275



Ver Perfil WWW
Re: Problema enviando eventos de mouse a PC remota con C#
« Respuesta #1 en: 30 Mayo 2007, 22:01 »

Que apis usas para mover el raton??? Supongo que usaras la del SetCursosPos, no???

De todas formas si cada vez que tu muevas el raton envias tu posicion al servidor es normal que tarde, ya que envias muchisimos datos en poco tiempo, y si lo tiene que procesar todo... :-\ :-\

Estas en una Lan???

Un Saludo.  ;)

En línea

"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián
seifer2006

Desconectado Desconectado

Mensajes: 31



Ver Perfil
Re: Problema enviando eventos de mouse a PC remota con C#
« Respuesta #2 en: 30 Mayo 2007, 22:39 »

Para mover el raton utilizo directamente esto:

Código:
Cursor.position = pos

Donde pos es un objeto de tipo Point. Ej:

Código:
pos = new Point(X, Y);

para utilizar Cursor.position hay que agregar el namespace:

System.Windows.Forms

En cuánto a la segunda pregunta sí estoy en una LAN. De hecho, no me preocupa tanto la velocidad, o mejor dicho, el programa funciona bien, pero sabiendo que los programas de control remoto al estilo VNC etc lo mueven un poco más rápido quería enterarme de alguna otra forma.

Probé la API SetCursorPos, pero me dio los mismos resultados que Cursor.position por lo tanto evité usarla xD.

Gracias.
En línea

Hendrix
In The Kernel Land
Colaborador
***
Desconectado Desconectado

Mensajes: 2.275



Ver Perfil WWW
Re: Problema enviando eventos de mouse a PC remota con C#
« Respuesta #3 en: 30 Mayo 2007, 22:48 »

Intenta poner en un textbox las coordenadas del cursor, veras como con un movimiento minimo cambian bastante.....imaginate esto enviando conexiones....ademas, muchas veces lo enviado se pueden "solapar" de manera que estas enviando 2 y solo recibe una....esto pasa si se envian muchos datos "masivamente"....

Pero con el <mov> de delante de las coordenadas creo que se filtra, verifica eso... ;) ;)

Un Saludo.  ;)

En línea

"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián
seifer2006

Desconectado Desconectado

Mensajes: 31



Ver Perfil
Re: Problema enviando eventos de mouse a PC remota con C#
« Respuesta #4 en: 30 Mayo 2007, 23:15 »

Si de hecho el server en este momento tiene un textbox que muestra los datos que llegan (esta solo de prueba para ver la cantidad de coordenadas y datos que llegan, y eso seguramente tambien ralentiza el proceso).

Por lo pronto, en el server...un pedazo de la rutina que procesa los datos sería mas o menos así

Supongamos que por la gran cantidad de datos que se mandan...lleguen paquetes concatenados...de este estilo:

"<MOV> XcoorxYcoorY\n<MOV> XcoorxYcoory\n" etc...
el codigo hace mas o menos lo siguiente
Código:
paquetes = paquete.Split('\n')
for (int i=0; i < paquetes.lenght; i++)
   {
      if (paquete[i].startswith("<MOV>")
            {
                pos = parsearcordenadas(paquete[i]);
                Cursor.position = pos;
            }
   }

Obviamente ese no es el codigo del programa, hay varias líneas, checkeos, etc etc...es solo para poner una breve idea de lo que hago. Todos los paquetes se envian con un "\n" al final. En el servidor...por mas que lleguen concatenados, se separan los mismos utilizando ese caracter, y se procesan por separado. De este forma, se pierden muy pocos paquetes. :¬¬

Bueno Hendrix, muchas gracias por la data, voy a probar quitando el textbox que muestra la info antes de ejecutar las acciones ya que debe ralentizar el proceso (seria como poner un print en el medio de todo jeje). ;D

Cualquier novedad aviso. Saludos!  :xD ::)
En línea

Hendrix
In The Kernel Land
Colaborador
***
Desconectado Desconectado

Mensajes: 2.275



Ver Perfil WWW
Re: Problema enviando eventos de mouse a PC remota con C#
« Respuesta #5 en: 30 Mayo 2007, 23:48 »

Si te sigue lento puedes hacer una cosa.....puedes calcular tu los demas pasos a partir de 2 puntos diferentes, por ejemplo, supongamos que te llega esto:

0,0 y luegp 10,10

de aqui se podria deducir que se trazo una linea recta del punto 0,0 al 10,10....luego aplicas un algoritmo que te recorra esto: 1,1; 2,2;3,3;4,4....10,10.

Es una manera de "emular" el mismo resultado sin sobrecargar tanto la linea.

Si te decides por este metodo, que sepas que como más corto sea el tiempo transcurrido entre conexiones más aproximado sera el movimiento del raton.

Un Saludo.  ;)

En línea

"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián
MazarD
Colaborador
***
Desconectado Desconectado

Mensajes: 885


mazard.info


Ver Perfil WWW
Re: Problema enviando eventos de mouse a PC remota con C#
« Respuesta #6 en: 31 Mayo 2007, 01:13 »

Por lo que comentais si es culpa del trafico unas recomendaciones:

El proto es "<MOV> XcordenadaxYcordenaday\n"
Suponiendo que las coordenadas son fijas a 3 bytes y suponiendo que te muevas todo un ancho de pantalla de 1024 en 1 segundo te sale 14,336 kb/s
No es excesivo pero ya que utilizas un socket solo para el movimiento, porque no quitas el "<MOV> " y te ahorraras como unos 6 o 7 kb/s en el caso concreto?

Además por lo que explicas supongo que compruebas que no se envie información si no ha cambiado la posición del cursor pero si además haces que solo envie cuando cambie en 2 o 3 pixels la diferencia será inapreciable y el ahorro de trafico notable.

Por último si utilizas overlapped i/o sockets en lugar de sockets convencionales te ahorrarás que se copie el buffer de entrada a tu buffer y ganarás también en velocidad y rendimiento.

Saludos.
En línea

-Learn as if you were to live forever, live as if you were to die tomorrow-

http://www.mazard.info
http://twitter.com/MazarD
irc://irc.freenode.org/elhacker.net
seifer2006

Desconectado Desconectado

Mensajes: 31



Ver Perfil
Re: Problema enviando eventos de mouse a PC remota con C#
« Respuesta #7 en: 31 Mayo 2007, 15:34 »

Muchas gracias por las respuestas Hendrix y MazarD. He tenido problemas eléctricos en casa, por lo que ando sin luz......estuve pensando seriamente quedarme a dormir en el trabajo para utilizar internet  :xD pero bueno.

Como dije antes, quitando el textbox mejora un poco la velocidad.
Las ideas que me pasaron son muy buenas asi que las voy a poner en practica, y ver cual más me resulta. Cualquier novedad se los comunico.

Gracias nuevamente por la calidad y velocidad de las respuestas..me gustaria ser colaborador en algun momento, aunque no creo que tenga tiempo por ahora para hacerlo... :¬¬

Saludos!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema enviando Strings por sockets en una multiconexion por Thread
Java
undercode2 1 1,515 Último mensaje 5 Mayo 2011, 03:21
por Leyer
Ayuda con eventos del mouse!!!
Programación C/C++
delirio 0 698 Último mensaje 27 Junio 2011, 11:13
por delirio
problema con eventos keypress en c#
Dudas Generales
makorro 3 919 Último mensaje 21 Octubre 2013, 21:12
por Eleкtro
Problema extraño de consumo/eventos.
Java
asdqwezxc 0 309 Último mensaje 16 Octubre 2014, 22:17
por asdqwezxc
Cómo apagar tu móvil de forma remota enviando un SMS
Noticias
wolfbcn 0 280 Último mensaje 16 Noviembre 2015, 14:17
por wolfbcn
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines