Hallo Frank,
zuerst mal, Fake Key Events sind maximal als bedingt sinnvoll zu
bezeichnen.
On Fri, Apr 02, 2004 at 12:59:23PM +0200, Frank Bertling wrote:
Ich möchte aus einem Script heraus eine Tastatureingabe simulieren,
habe jedoch keine Idee, wie dieses zu realisiern ist.
ich hab dir hier mal ein Programm gebaut, dass als Argument das
gewünschte Programm und evtl. eine Verzögerung haben will. Das
Programm muss mit absolutem Pfad und die Verzögerung in Sekunden
angegeben werden.
Beispielaufruf:
./right `which xterm`
// ----------------fake.c-----------------------------------
// Kompilierung:
// gcc -I/usr/X11R6/include -L/usr/X11R6/lib -o right fake.c -lX11 -lXtst
#include
#include
#include
#include
#include
#define EXEC
int main (int argc, char *argv[])
{
Display* disp = XOpenDisplay( NULL );
#ifdef EXEC
if ((argc != 2) && (argc != 3)){
fprintf(stderr,
" usage: %s <FileToExecute> [wait]\n", argv[0]);
return -1;
}
if (argc == 3){
sleep(atoi(argv[2]);
}
#endif
if( disp == NULL ){
fprintf(stderr, " could not open display\n");
return -1;
}
XTestFakeKeyEvent( disp,
XKeysymToKeycode( disp, XK_Alt_L), True, CurrentTime );
XTestFakeKeyEvent( disp,
XKeysymToKeycode( disp, XK_Control_L), True, CurrentTime );
XTestFakeKeyEvent( disp,
XKeysymToKeycode( disp, XK_Right), True, CurrentTime );
XTestFakeKeyEvent( disp,
XKeysymToKeycode( disp, XK_Right), False, CurrentTime );
XTestFakeKeyEvent( disp,
XKeysymToKeycode( disp, XK_Control_L), False, CurrentTime );
XTestFakeKeyEvent( disp,
XKeysymToKeycode( disp, XK_Alt_L), False, CurrentTime );
XCloseDisplay( disp );
#ifdef EXEC
if ( execv(argv[1], NULL) < 0){
fprintf(stderr, " could not exec() %s \n", argv[1]);
return -1;
}
#endif
return 0;
}
Wenn Du nur das Display ändern und nicht gleich ein Programm
übergeben willst ändere die Zeile "#define EXEC" in "//#define EXEC"
Greetings Daniel
--
<sonnny> hm ich weiss warum linux so stabil ist es liegt an den pinguienen,
was nicht fliegen kann kann auch nicht abstürzen :)