Skip to content

Instantly share code, notes, and snippets.

@0xa
Created January 5, 2013 17:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 0xa/4462668 to your computer and use it in GitHub Desktop.
Save 0xa/4462668 to your computer and use it in GitHub Desktop.
#include <X11/Xlib.h>
#include <X11/keysym.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
const char* text = "le avoir savoir nuit leur ton je avant qui pays te se homme chez entrer tout leur encore heure regard "
"jour elle ne au savoir entrer appeler ton revenir fille pied enfant contre ame chambre "
"toujours ce parler coup ne rendre noir pied donc quelque sans peu ciel vie ici mille tres "
"sur main main rester quelque de sembler ni ce avoir vouloir voix vingt voir soir autre "
"avec eau parce que pendant oui votre cent reprendre ça lequel en voix vivre enfin fois "
"toujours avec sous on seul falloir regarder amour puis lui aimer sous pour la comme gens "
"le mille votre porter aussi lui chercher en maintenant dont en croire trois monde au nuit "
"pere moins yeux alors entre prendre faire car bien quand parce que quand parler contre cent "
"maison sortir et moi tete car etre pas tant ville où penser connaitre celui parce que ou "
"trop femme mourir terre falloir entendre avec jour pas trouver petit ou sur jeune cote "
"mille mot toi regard voir arriver sembler pere donc au homme ca ami depuis quatre pour "
"y comme entendre yeux tu deux aussi celui on toi bon rester trois autre nouveau plus "
"lequel sous eau terre apres moins aussi croire tête enfant y mettre tenir trop devant chambre "
"tres mon depuis premier ni avoir si toujours ainsi me deja ville chose dont lui grand dieu "
"porter femme rien y petit elle moi yeux an de quel aimer fille sentir bien il revenir mer mourir "
"devant vingt son mari vivre beau jamais sentir encore moi non chaque ville jamais trouver même toi peu etre repondre penser";
/// -- thanks --
// Send a fake keystroke event to an X window.
// by Adam Pierce - http://www.doctort.org/adam/
// This is public domain software. It is free to use by anyone for any purpose.
XKeyEvent createKeyEvent(Display *display, Window &win,
Window &winRoot, bool press,
int keycode, int modifiers)
{
XKeyEvent event;
event.display = display;
event.window = win;
event.root = winRoot;
event.subwindow = None;
event.time = CurrentTime;
event.x = 1;
event.y = 1;
event.x_root = 1;
event.y_root = 1;
event.same_screen = True;
event.keycode = XKeysymToKeycode(display, keycode);
event.state = modifiers;
if(press)
event.type = KeyPress;
else
event.type = KeyRelease;
return event;
}
int getRandMultiplier() {
return rand()%4000+500;
}
int main() {
int len = strlen(text);
int i = 0;
int keycode = 0;
int waitms = 10;
int revert;
Window winRoot;
Window winFocus;
while(i < len) {
if (text[i] == ' ') {
keycode = XK_space;
} else {
keycode = XK_a + (text[i] - 'a');
}
Display *display = XOpenDisplay(0);
if(display == NULL)
return -1;
winRoot = XDefaultRootWindow(display);
XGetInputFocus(display, &winFocus, &revert);
XKeyEvent event = createKeyEvent(display, winFocus, winRoot, true, keycode, 0);
XSendEvent(event.display, event.window, True, KeyPressMask, (XEvent *)&event);
usleep(waitms*getRandMultiplier());
event = createKeyEvent(display, winFocus, winRoot, false, keycode, 0);
XSendEvent(event.display, event.window, True, KeyPressMask, (XEvent *)&event);
usleep(waitms*getRandMultiplier());
XCloseDisplay(display);
i++;
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment