Cuando desperté, bañado en sudor, y eso porque está haciendo mucho calor en la ciudad de México, me di a la tarea de ver cómo se podía hacer semejante labor. Es un hecho que escribir una aplicación que mida lo que quiero medir no es un programa tradicional, porque desde luego, puede escribirse un programa que lleve cuenta de dónde está el ratón, sus coordenadas, etc, pero solamente funcionará para el programa que se ejecuta. Es decir, si el "foco" del programa ya no está en la ventana del mismo, el software no podrá llevar cuenta de esos valores del ratón en ningún momento.
La solución es un "hook", enganchar un programa que haga esta labor de correr digamos "tras bambalinas", a nivel sistema, y que nos diga entonces las coordenadas del ratón en todo momento. Engancharse con el API de Windows es en realidad un proceso complicado y aunque hay diversas técnicas para lograrlo, Microsoft recomienda que la llamada (callback), del procedimiento del hook resida en una biblioteca de enlace dinámico (DDL).
Revisando en Internet, hallé diferentes programas que hacían hook para atrapar los eventos del ratón. Sin embargo, hallé una biblioteca de funciones para este propósito, escritas en Delphi (compatibles con las versiones 4/5/6/7/8/9), que hacen la tarea encomendada. Las bibliotecas se llaman: TCPMouseHook® System Wide Mouse Hook and DLL for Borland Delphi. El desarrollador es BitLogic Software Solutions, una empresa que está en el Reino Unido. Las rutinas son accesibles gratuitamente pero tienen una pantalla al inicio del programa que las use, indicando que no se ha pagado ninguna licencia por ellas. Si se desea pagar, entonces el autor del software manda una clave que deshabilita la pantalla inicial (llamada en el ambiente de cómputo "nag screen") y entonces el software funciona igual que antes, pero sin la pantalla comercial al inicio del mismo.
Aparte de esto, decidí también medir cuantos clicks se dan al botón izquierdo del ratón y algo más... debido a que hay muchas resoluciones de pantalla, la idea para medir la distancia en cms, por ejemplo, fue la de medir qué resolución tengo en la pantalla. Por ejemplo, en mi caso, 1200x800 (creo). Pues bien, en mi monitor, medí la distancia horizontal de la pantalla y hallé que hay unos 40 cms de largo, lo cual equivale a unos 34 pixeles por cm. De esta manera, podía ya entonces saber la distancia final que hubiese recorrido el ratón en cms.
¿Para qué puede servir este programa? Ni idea. Quizás no tenga mayor utilidad. Las rutinas que enganchan los procedimientos y eventos del ratón vía las bibliotecas mencionadas pueden, sin duda, tener mejor aplicación que la que a mí se me ocurrió, pero el asunto era ver cómo se podía hacer algo de esta naturaleza.
A quien le interese este maravilloso programa puede pedírme a morsa@la-morsa.com, y a vuelta de correo tendrá el sistema. Cabe decir que los programas antivirus, como el AVG FREE, por ejemplo, brincan cuando se correo este programa y de hecho, no deja que se ejecute, porque claramente la biblioteca de funciones para hacer el hook del ratón le parece sospechoso y eso no lo hacen los programas normales. Así entonces, si el software no corre, es porque el antivirus no les está dejando. De hecho, eso me pasó cuando quise correrlo y veía que no se instalaba el hook. Ésa fue la razón.
3 comments:
Se supone que los displays modernos (y sistemas operativos modernos) ya te dan info no solamente de la resolución de la pantalla, sino de los DPI, con eso puedes hacer automáticamente cuentas de cuánto es un centímetro, no? y así puedes calibrarlo automáticamente, sin que el usuario tenga que calcular nada... haz pruebas de tus cálculos simplemente presentando un cuadro de 1cm^2 en distintas pantallas y medirlo con una regla o cinta métrica.
Creo que esa aplicación tiene un problema, ya que no se puede calcular la distancia que recorre el raton primero si estas en una pantalla de 800x600 o en una de 1280x1024, la segunda es cada ratón es distinto, por ejemplo los ópticos generan problemas en los tapetes de muchos colores ya que cambia la refracción de la respuesta y el puntero puede aparecer en otro lado, lo que tienen una bolita (la resolución es distinta para cada uno desde 100 hasta 4000 ppp) y si esta se ensucia puede marcar también con errores, esa aplicación no es funcional como la que mide cuantas teclas presionas por minuto o cosas de esas.
Jonás,
He estado pensando en el tema y lo que hago es simplemente medir qué resolución tiene la pantalla contra la distancia en cms de la misma (por ejemplo en horizontal). Así, si mi pantalla mide unos 40 cms y estoy a 1280x800, por decir algo, entonces 1280/40 da 32, es decir, 32 pixeles por cms (en la pantalla). Sin importar la resolución, los dpi del ratón, etc, yo sólo mido el movimiento dentro de la pantalla.
Por supuesto que se puede atorar, o ensuciar la bolita, pero bueno, es una aproximación nada más. Por ejemplo, si mueves el ratón en círculos, pues evidentemente yo sólo mediré de un click al otro en línea recta. Así que no es lo más preciso.
Alguien de matuk.com bajó el programa y me dijo que en una sesión de unas cuatro horas, había movido el ratón unos 2.7 kms.
saludos
Post a Comment