Thread Gnome Tastatureingaben simulieren?
(1 answers)
Opened by deko at 2010-06-09 20:28
es gibt eine Reihe von Programmen, mit denen man Tastatur/Maus/Window-Manager Events an ein Fenster senden kann. Das was du wohl am ehesten suchst ist wohl: xdotool
Hier ein Beispiel wie man es verwenden kann: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 #!/usr/bin/perl use strict; use warnings; # Programm das gestartet werden soll: my $app='/usr/bin/leafpad'; # "leafpad" ist ein kleiner schnell gestarteter Texteditor # suche nach dem Fenser über die Processid my $search_cmd='/usr/bin/xdotool search --onlyvisible --pid %u'; # Tastatur Kommando senden my $kbd_send_cmd=q(/usr/bin/xdotool type --window %u '%s'); # Kindprozess erzeugen # dabei sich die ProzessID merken # man kann sich auch zu laufenden Prozessen die ID Holen # Doch so ist es für ein Beispiel einfacher. $SIG{CHLD}='IGNORE'; my $pid=fork; exec($app) or die "ERROR runn $app\n" if(defined($pid) && ! $pid); die("ERROR FORK\n") unless($pid); # warten bis das Fenster erzeugt wurde sleep(2); # nachschauen ob der prozess noch läuft die("ERROR $app (PID: $pid) Exit\n") if(kill(0,$pid)!=1); # Das Fenster suchen # es kann sein, dass ein Programm mehrer Fenster öffnen # Das müsste eventuell abgefangen werden. # Man bekommt eine/mehrere FensterIDs zurück my $cmd=sprintf($search_cmd,$pid); my $winid=qx($cmd); chomp($winid); # habe wir ein Fenster? if($winid) { # Testausgabe print "FOUND WINID:$winid for $app (PID: $pid)\n"; # Text an das Fenser absenden $cmd=sprintf($kbd_send_cmd,$winid,"HALLO WELT"); system($cmd); } else { die("ERROR get WinID for $app (PID: $pid)\n"); } Wenn du mehr über die Hintergründe wissen willst, kann ich dir ein Beispiel posten, das nur Perl und die X11lib nutzt. Das ist aber für Anfänger nichts. :-) |