El otro día estaba viendo un set de fotos en Flickr creado a partir de las imágenes resultantes de seguir el movimiento del ratón en el escritorio durante un periodo de tiempo determinado. Las imágenes están aqui.
Es una chorrada lo sé, pero quise probarlo, pero “oh! dios mio!” la aplicación solo está disponible para Windows y Mac. Maldita sea, aquí me han tocado los la moral.

Pero ete aquí las bondades del open source, un par de vueltas por internet hasta llegar aquí, ya tenemos el 90% hecho: una mini-aplicación que muestra las coordenadas del ratón en una ventanita QT. Solo falta hacer un pequeño extra para que los datos de las coordenadas se vuelquen a un fichero y a partir de este generar una imagen del rastro seguido por el ratón durante el tiempo que queramos.

Si te quita el sueño tener tu propio mouse pointer track, compila tu propio programa en 3 comodos pasos, tal y como sigue (nota: no tengo ni pajolera idea de C, simplemente he añadido 2 lineas extras al código original de CPP para producir la salida en consola. Si teneis que partirle las piernas a alguien no mireis para acá )
Guarda estas lineas en un archivo llamado “puntero.h
#ifndef CROSSHAIR_H
#define CROSSHAIR_H
#include <qwidget.h>
#include <qstring.h>
#include <qlabel.h>
#include <qevent.h>
class Crosshair : public QLabel {
Q_OBJECT
public:
Crosshair(QWidget *parent=0);
protected:
void mousePressEvent(QMouseEvent *);
private:
QTimer *timer;
private slots:
void timerfire();
};
#endif

Y este otro contenido en otro archivo llamado “puntero.cpp
#include <qapplication.h>
#include <qpushbutton.h>
#include <qtimer.h>
#include <qcursor.h>
#include <iostream>
#include "crosshair.h"
using namespace std;
int main(int argc,char **argv) {
QApplication a(argc,argv);
Crosshair mousepos;
a.setMainWidget(&mousepos);
mousepos.show();
return a.exec();
}
Crosshair::Crosshair(QWidget *parent) : QLabel(parent) {
setIndent(20);
resize(100,30);
move(1200,200);
setText("0,0");
timer=new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(timerfire()));
timer->start(50,false);
}
void Crosshair::mousePressEvent(QMouseEvent *) {
qApp->quit();
}
void Crosshair::timerfire() {
QPoint p=QCursor::pos();
this->setText(QString().sprintf("%d,%d",p.x(),p.y()));
}

Guarda estos dos archivos “puntero.h” y “puntero.cpp” en una carpeta, por ejemplo “puntero”. En una consola en dicha carpeta haces:qmake -project
qmake
make

Listo (claro, doy por hecho que tienes las librerias necesarias para esta compilación). En la carpeta deberias tener un binario llamado “puntero”. Al lanzarlo se abre una ventanita Qt con las coordenadas del ratón, lo mismo que podrás ver al ejecutarlo en un terminal.
Cuando quieras comenzar a grabar los movimientos del ratón haces en una consola:./puntero >> salida_coord.txt
Para terminar, cierra la ventana. Tendras un archivo de texto conteniendo 2 coordenadas x,y por linea, ahora puedes generar facilmente la imagen con:import - | convert - -fill "rgba(0,0,0,0)" -strokeWidth 2 -stroke "rgba(20,20,20,100)" -draw "polyline $(cat salida_coord.txt)" rastro_del_raton.jpg
Con la linea anterior cambiará el puntero del ratón, cliquead en el escritorio o en la ventana que querais capturar, a continuación “convert” dibujará una polilinea negra-semitransparente usando las coordenadas generadas sobre la captura de pantalla. Voilá.

rastro del ratonrastro del raton

PD: Para megavagos el binario para descargar está aqui.