mse hat geschrieben:Noch ein Tip:
Ich würde eine eigenes Testprogramm als Empfänger schreiben,
Zur Not tut's auch das Programm xev aus der Shell gestartet
mse hat geschrieben:Noch ein Tip:
Ich würde eine eigenes Testprogramm als Empfänger schreiben,
Code: Alles auswählen
procedure tmainfo.button1execute(const sender: TObject);
var
event: txevent;
begin
fillchar(event,sizeof(event),0);
with event.xkey do begin
_type:= keypress;
window:= self.window.winid;
root:= mserootwindow;
keycode:= xkeysymtokeycode(msedisplay,ord('A'));
//'A'..'Z' use ASCII numbers, see keysymdef.h
state:= shiftmask;
//simulate a pressed shift key, state is an ored combination
//of Button1Mask, Button2Mask, Button3Mask, Button4Mask,
//Button5Mask, ShiftMask, LockMask, ControlMask, Mod1Mask,
// Mod2Mask, Mod3Mask, Mod4Mask, and Mod5Mask
xsendevent(msedisplay,window,true,keypressmask,@event);
_type:= keyrelease;
xsendevent(msedisplay,window,true,keyreleasemask,@event);
end;
end;
Code: Alles auswählen
XOpenDisplay(nil);
Code: Alles auswählen
XDefaultRootWindow(msedisplay);
_X_ hat geschrieben:Wie machst du das?
Code: Alles auswählen
fillchar(event,sizeof(event),0);
event._type:= x.keypress;
with event.xkey do begin
Code: Alles auswählen
unit Unit1;
{$MODE objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
xlib, x, gdk, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Edit1: TEdit;
procedure Edit1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{ TForm1 }
function createKeyEvent(Display: Pdisplay; win: TWindow;
winRoot: TWindow; press: Boolean;
keycode: integer; modifiers: integer): TXKeyEvent;
var event: TXKeyEvent;
begin
event.display := display;
event.window := win;
event.root := winRoot;
event.subwindow := None;
event.time := CurrentTime;
event.x := 1;
event.y := 1;
event.x_root := 1;
event.y_root := 1;
event.same_screen := True;
event.keycode := XKeysymToKeycode(display, keycode);
event.state := modifiers;
if press then
event._type := KeyPress
else
event._type := KeyRelease;
result := event;
end;
procedure TForm1.Edit1Click(Sender: TObject);
var winRoot, winFocus: TWindow;
dpy: PDisplay;
revert: integer;
event: TXKeyEvent;
KEYCODE: integer;
begin
dpy := gdk_display;
winRoot := XDefaultRootWindow(Pointer(dpy));
XGetInputFocus(dpy, @winFocus, @revert);
KEYCODE := ord('b');
event := createKeyEvent(dpy, winFocus, winRoot, true, KEYCODE, 0);
XSendEvent(event.display, event.window, True, KeyPressMask, @event);
event := createKeyEvent(dpy, winFocus, winRoot, false, KEYCODE, 0);
XSendEvent(event.display, event.window, True, KeyPressMask, @event);
end;
initialization
{$I unit1.lrs}
end.