Rastro del ratón en Linux
viernes, 29 de enero de 2010El 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á.
PD: Para megavagos el binario para descargar está aqui.
null
#1/ 30 de January/2010 a 18:26:30
Otros comentarios de «null»
me ha funcionado todo menos el ultimo comando, se cambia el cursos del ratón , pincho y un par de segundos después se cierra el comando.. no mas.
justo estaba escribiendo esto de arriba, he ejecutado el comando con strace a ver donde fallaba y leyendo no se que de "resource unvailable", en donde se había parado, han petado las X, también es normal con un kernel 2.6.33-rcx y las X, drm y demás todo compilado y experimental..
debería haberlo probado en ubuntu que no lo toqueteo tanto.
nemo
#2/ 30 de January/2010 a 19:16:33
Otros comentarios de «nemo»
Por eso me encanta el open source y la programación!
genial!
Trebol-A
#3/ 30 de January/2010 a 19:37:10
Otros comentarios de «Trebol-A»
null, prueba con algunas de las opciones de import, como : import -window root , pero ten en cuenta que import accede a las X y si dices las compiladas y en plan experimental pues...
En plan seguro siempre puedes hacer la captura de pantalla clasica con Ksnapshot y cambiar la última linea por:
convert captura.jpg .... opciones polylinea... salida.jpg
null
#4/ 31 de January/2010 a 13:23:10
Otros comentarios de «null»
si, mejor cuando arranque ubuntu, si me acuerdo lo reintento, que ademas acabo de actualizar las X de nuevo a 1.7.4.901 y voy a ver el 3d como anda...
23 de November, 2024 @ 10:24