Seite 1 von 1

Tastendruck simulieren

Verfasst: 2. Oktober 2005 23:50
von miho
Hallo zusammen,

Dies ist mein erster Post hier im Forum!

Ich wollte mal fragen, wie ich unter Linux/Qt einen Tastendruck simulieren kann. Ich will nämlich ein Software-Keyboard schreiben. Bisher hab ich nichts darüber gefunden. Hat jemand ne Idee? Danke für eure Hilfe!

gruß,
miho

Verfasst: 3. Oktober 2005 09:28
von ArneStocker
Hi

wie wär's mit einem KeyEvent an das WIdget, dass den Focus hat (oder erhalten soll) ?

Gruss Arne

Verfasst: 3. Oktober 2005 12:11
von BartSimpson
oder soll der Tastendruck an das System gesendet werden?

Verfasst: 3. Oktober 2005 12:36
von miho
Genau! Der Tastendruck soll an jede Anwendung im System gesendet werden können.

Verfasst: 3. Oktober 2005 12:49
von BartSimpson
Also als wenn jemand auf die Taste drücken würde.
Hm ich füchte denn must du eine arte Userspace Kerneltreiber bauen.

Verfasst: 3. Oktober 2005 14:05
von miho
Wie geht man an sowas heran? Oder gibt es nicht schon solche Treiber, denn es gibt doch einige Systeme mit Touchpad auf Qt Basis, die ne Software-Tastatur haben?

Verfasst: 3. Oktober 2005 14:31
von BartSimpson
Mit sowas habe ich mich noch nie im Detail beschäfugt. Aber ein touchpad dürfte in das System ähnlich einer Maus eingebunden werden.

Verfasst: 3. Oktober 2005 16:06
von miho
Ich hab mal eine Handschrifterkennung für Linux-PDA's zerpflückt und bin dabei fündig geworden. Man kann das Ganze mit der Xlib lösen. Ein Beispiel: führt man das Programm aus, scheint die "a"-Taste zu klemmen:)

a-taste.cpp:

Code: Alles auswählen

#include <X11/Xlib.h>
#include <X11/extensions/XTest.h>
#include <X11/XKBlib.h>
#include <unistd.h>



main()
{
  // Open a display.
  Display *d = XOpenDisplay(0);


if ( d )
{
    	while (true)
	{
		XTestFakeKeyEvent (d, XKeysymToKeycode( d, 'a' ), true, 0);
		XTestFakeKeyEvent (d, XKeysymToKeycode( d, 'a' ), false, 0);
	}
}
  return 0;
}
übersetzen mit : g++ a-taste.cpp -L/usr/X11R6/lib -lX11 -lXtst

Gesendet wird das KeyEvent immer an das Fenster, das gerade offen ist.

Gruß,
miho