#!/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"); }