• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Tastatureingabe gleichzeitig auf 2 Programme

clin

Member
Hallo allerseits,

ich suche ein Programm, mit dem ich Tastatur-Eingaben in ein Internet-Formular gleichzeitig auf ein OpenOffice Tabellendokument eintragen kann. Gibt es soetwas schon fertig zum Download oder auf welche Weise könnte ich so etwas einfach realisieren? :?
Eine Möglichkeit wäre es vermutlich, die Tastatur gleichzeitig an zwei verschiedene Rechner anzuschließen, vielleicht geht es aber mit Software etwas einfacher?? :wink:
Für jeden Hinweis dankbar grüßt
Claas.
 

whois

Ultimate Guru
Hi

Du meist eine Eingabe und gleichzeitiges mit Protokollieren?
Sowas habe ich in der Linux Welt noch nicht gesehen,bei Windows kannte ich sowas mal.

cu
 
OP
C

clin

Member
Ja, so was meine ich, wobei die Benutzung der Tab-Taste oder Enter-Taste gleich auch in das nächste Eingabefeld weiterschalten sollte.
Danke für den Hinweis auf Windows aber wenn möglich würde ich das gern unter Linux haben.
Mal warten, ob noch weitere Hinweise kommen.
Claas.
 

abgdf

Guru
Keine leichte Aufgabe. Tastatureingaben zu senden, stellt nämlich grundsätzlich ein Sicherheitsrisiko dar.

Lies Dich doch mal hier ein:

http://www.usenet-forums.com/linux-general/84599-sendkeys-equivalent-linux.html

Vielversprechend sehen xmacro

http://xmacro.sourceforge.net/

und xautomation

http://hoopajoo.net/projects/xautomation.html

aus. (Möglicherweise auch "Expect" in Tcl:

http://expect.nist.gov/

oder das Python-Pendant "Pexpect"

http://www.noah.org/wiki/Pexpect
)

Viele Grüße
 

abgdf

Guru
Mit "xmacro" klappt das bei mir nicht so gut :(.

Vielleicht kann auch "xvkbd" nützen.

Ich könnte mir vorstellen, in einem Perl/Tk- oder Python/Tkinter-Fenster die Keyboardevents aufzufangen und diese dann sowohl an den Browser als auch an OOo zu senden.

Gruß
 

abgdf

Guru
Hi,

so, hab' jetzt mal selbst was in C zusammengefriemelt (mit Hilfe des Quellcodes unter anderem von "joy2key" und "xvoice"):

- Sendet an 2 andere Fenster (auch an Mozilla/Firefox und OOo) und zwar nach jedem String zusätzlich noch einen "Tab":

Code:
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <X11/keysym.h> 
#include <X11/extensions/XTest.h> 
 
/* sender.c */

int getWinID();
void sendIt(Display* disp, int win, char* text);

int main (void)
{ 
    int win[3] = {0, 0, 0};
    char text[300];
    int i;

    puts("Please click on this window once.");
    win[0] = getWinID();
    
    puts("Please click on the first of the windows to send events to.");
    win[1] = getWinID();

    puts("Please click on the second window to send events to.");
    win[2] = getWinID();

    Display* disp = XOpenDisplay(NULL); 

    if(disp == NULL)
    { 
        fprintf(stderr, " could not open display\n"); 
        return -1; 
    } 

    puts("Now enter something here ('q' to quit):");

    while(1)
    {
        XSetInputFocus(disp, win[0], 0, CurrentTime);

        printf("> ");
        scanf("%s", &text);
        fflush(stdin);

        if(strcmp(text, "q") == 0)
        {
            puts("\nBye.\n");
            break;
        }

        for(i = 1; i <= 2; i++)
        {
            sendIt(disp, win[i], text);
        }

        XFlush(disp);
    }
 
    XCloseDisplay(disp); 

    return 0; 
} 


int getWinID()
{
    FILE *foo;
    char string[255];

    int thewindow = 0;

    sprintf(string, "xwininfo");
    foo=popen(string, "r");
    while(!feof(foo) && fgets(string, 255, foo) &&
          (sscanf(string, "xwininfo: Window id: %x", &thewindow) != 1));
    pclose(foo);

    if(thewindow == 0)
    {
        puts("Window not recognized.");
        exit(1);
    }

    return thewindow;
}


void sendIt(Display* disp, int win, char* text)
{
    int i;

    XSetInputFocus(disp, win, 0, CurrentTime);

    for(i = 0; i < strlen(text); i++)
    {
        if(text[i] >= 'A' && text[i] <= 'Z')
        {
            XTestFakeKeyEvent(disp, XKeysymToKeycode(disp, XK_Shift_L), True, 0); 
        }

        XTestFakeKeyEvent(disp, XKeysymToKeycode(disp, text[i]), True, 0); 
        XTestFakeKeyEvent(disp, XKeysymToKeycode(disp, text[i]), False, 0);

        if(text[i] >= 'A' && text[i] <= 'Z')
        {
            XTestFakeKeyEvent(disp, XKeysymToKeycode(disp, XK_Shift_L), False, 0); 
        }
    }

    XTestFakeKeyEvent(disp, XKeysymToKeycode(disp, XK_Tab), True, 0); 
    XTestFakeKeyEvent(disp, XKeysymToKeycode(disp, XK_Tab), False, 0);
 
    XFlush(disp);

    return;
}
Speichern als "sender.c", dann kompilieren mit
Code:
gcc -I/usr/X11R6/include -L/usr/X11R6/lib -o send sender.c -lX11 -lXtst
Ausführen dann mit
Code:
./send
HTH

Viele Grüße

Edit: Noch um "Senden von Großbuchstaben" erweitert.
 
OP
C

clin

Member
Hi,
vielen Dank für alle Vorschläge, insbesondere auch für das c-Programm! :D
Ich werde alles ausprobieren und die Ergebnisse berichten.
Viele Grüße
Claas.
 
Oben