Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
114
Task/Simulate-input-Keyboard/C/simulate-input-keyboard-1.c
Normal file
114
Task/Simulate-input-Keyboard/C/simulate-input-keyboard-1.c
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/Xutil.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
Display *dpy;
|
||||
Window win;
|
||||
GC gc;
|
||||
int scr;
|
||||
Atom WM_DELETE_WINDOW;
|
||||
XEvent ev;
|
||||
XEvent ev2;
|
||||
KeySym keysym;
|
||||
int loop;
|
||||
|
||||
/* open connection with the server */
|
||||
dpy = XOpenDisplay(NULL);
|
||||
if (dpy == NULL) {
|
||||
fputs("Cannot open display", stderr);
|
||||
exit(1);
|
||||
}
|
||||
scr = XDefaultScreen(dpy);
|
||||
|
||||
/* create window */
|
||||
win = XCreateSimpleWindow(dpy,
|
||||
XRootWindow(dpy, scr),
|
||||
/* x, y, width, height, border_width */
|
||||
10, 10, 300, 200, 1,
|
||||
/* border, background */
|
||||
XBlackPixel(dpy, scr), XWhitePixel(dpy, scr));
|
||||
|
||||
/* set window name */
|
||||
XStoreName(dpy, win, argv[0]);
|
||||
|
||||
/* select kind of events we are interested in */
|
||||
XSelectInput(dpy, win, ExposureMask | KeyPressMask | ButtonPressMask);
|
||||
|
||||
/* map (show) the window */
|
||||
XMapWindow(dpy, win);
|
||||
XFlush(dpy);
|
||||
|
||||
/* default graphics context */
|
||||
gc = XDefaultGC(dpy, scr);
|
||||
|
||||
/* connect the close button in the window handle */
|
||||
WM_DELETE_WINDOW = XInternAtom(dpy, "WM_DELETE_WINDOW", True);
|
||||
XSetWMProtocols(dpy, win, &WM_DELETE_WINDOW, 1);
|
||||
|
||||
/* event loop */
|
||||
loop = 1;
|
||||
while (loop) {
|
||||
XNextEvent(dpy, &ev);
|
||||
switch (ev.type)
|
||||
{
|
||||
case Expose:
|
||||
/* draw or redraw the window */
|
||||
{
|
||||
char msg1[] = "Clic in the window to generate";
|
||||
char msg2[] = "a key press event";
|
||||
XDrawString(dpy, win, gc, 10, 20, msg1, sizeof(msg1)-1);
|
||||
XDrawString(dpy, win, gc, 10, 35, msg2, sizeof(msg2)-1);
|
||||
}
|
||||
break;
|
||||
|
||||
case ButtonPress:
|
||||
puts("ButtonPress event received");
|
||||
/*
|
||||
printf("> button (x,y) : %d %d\n",
|
||||
ev.xbutton.x,
|
||||
ev.xbutton.y);
|
||||
*/
|
||||
ev2.type = KeyPress;
|
||||
ev2.xkey.state = ShiftMask;
|
||||
ev2.xkey.keycode = 24 + (rand() % 33);
|
||||
ev2.xkey.same_screen = True;
|
||||
XSendEvent(dpy, win, True/*propagate*/, KeyPressMask, &ev2);
|
||||
break;
|
||||
|
||||
case ClientMessage:
|
||||
/* delete window event */
|
||||
if (ev.xclient.data.l[0] == WM_DELETE_WINDOW)
|
||||
loop = 0;
|
||||
break;
|
||||
|
||||
case KeyPress:
|
||||
/* handle key press */
|
||||
puts("KeyPress event received");
|
||||
printf("> keycode: %d\n", ev.xkey.keycode);
|
||||
/* exit if q or escape are pressed */
|
||||
keysym = XLookupKeysym(&(ev.xkey), 0);
|
||||
if (keysym == XK_q ||
|
||||
keysym == XK_Escape) {
|
||||
loop = 0;
|
||||
} else {
|
||||
char buffer[] = " ";
|
||||
int nchars = XLookupString(
|
||||
&(ev.xkey),
|
||||
buffer,
|
||||
2, /* buffer size */
|
||||
&keysym,
|
||||
NULL );
|
||||
if (nchars == 1)
|
||||
printf("> Key '%c' pressed\n", buffer[0]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
XDestroyWindow(dpy, win);
|
||||
/* close connection to server */
|
||||
XCloseDisplay(dpy);
|
||||
return 1;
|
||||
}
|
||||
90
Task/Simulate-input-Keyboard/C/simulate-input-keyboard-2.c
Normal file
90
Task/Simulate-input-Keyboard/C/simulate-input-keyboard-2.c
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
#include <gadget/gadget.h>
|
||||
|
||||
LIB_GADGET_START
|
||||
|
||||
Main
|
||||
Enable_raw_mode();
|
||||
int tecla=0;
|
||||
int t=0;
|
||||
while (tecla!=27 ){
|
||||
while ( Kbhit() ){
|
||||
tecla = Getch();
|
||||
Disable_raw_mode();
|
||||
/* para algunas teclas, imprimirá el código interno que maneja
|
||||
Gadget para estos eventos, código que no es estándar */
|
||||
printf("TECLA = %d\n",tecla);
|
||||
Enable_raw_mode();
|
||||
}
|
||||
usleep(100);
|
||||
++t;
|
||||
if ( t==10000 ){
|
||||
system("xdotool key Return");
|
||||
}else if( t==11000 ){
|
||||
// Mi teclado actual es del MacBook Pro.
|
||||
// En otro tipo de teclado, el código puede cambiar.
|
||||
// consulte X11/keysymdef.h para más informacion.
|
||||
Key_put(KEYP_ENTER); //0xff8d);
|
||||
|
||||
}else if( t==12000 ){
|
||||
Key_put(KEYP_LEFT);
|
||||
|
||||
}else if( t==13000 ){
|
||||
Key_put(KEYP_RIGHT);
|
||||
|
||||
}else if( t==14000 ){
|
||||
Key_put(KEYP_UP);
|
||||
}else if( t==15000 ){
|
||||
Key_put(KEYP_DOWN);
|
||||
|
||||
}else if( t==16000 ){
|
||||
Key_put(KEYP_PAGEUP);
|
||||
}else if( t==17000 ){
|
||||
Key_put(KEYP_PAGEDOWN);
|
||||
|
||||
}else if( t==18000 ){
|
||||
Key_put(KEYP_HOME);
|
||||
}else if( t==19000 ){
|
||||
Key_put(KEYP_END);
|
||||
}else if( t==20000 ){
|
||||
Key_put(' ');
|
||||
}else if( t==21000 ){
|
||||
Key_put(KEYP_BACKSP);
|
||||
}else if( t==22000 ){
|
||||
Key_put(KEYP_TAB);
|
||||
}else if( t==23000 ){
|
||||
Key_put(KEYP_DELETE);
|
||||
|
||||
}else if( t==24000 ){
|
||||
Key_put_ctrl('a');
|
||||
}else if( t==24100 ){
|
||||
Key_put_ctrl('b');
|
||||
}else if( t==24200 ){
|
||||
Key_put_ctrl('w');
|
||||
|
||||
}else if( t==24300 ){
|
||||
Key_put_shift('a');
|
||||
|
||||
}else if( t==24400 ){
|
||||
Key_put_alt('j'); // esto no funciona en mi teclado
|
||||
|
||||
}else if( t>=25000 ){
|
||||
Key_put(KEYP_ESCAPE);
|
||||
}
|
||||
}
|
||||
|
||||
// Put_kbd_text() reconoce estos caracteres: otros caracteres, el
|
||||
// resultado puede ser indefinido.
|
||||
|
||||
Put_kbd_text("Hola mundo[](){},.:;-_=?$%&/#@! \t<cruel>\n Año 2023");
|
||||
|
||||
String read;
|
||||
// si no se ha puesto nada en el buffer de entrada con Put_kbd_text(),
|
||||
// read será NULL:
|
||||
read = Read_typed_string();
|
||||
|
||||
Disable_raw_mode();
|
||||
if ( read){
|
||||
printf("\nTEXTO = %s\nChar = %d\n",read, read[strlen(read)-1]);
|
||||
}
|
||||
free(read);
|
||||
End
|
||||
Loading…
Add table
Add a link
Reference in a new issue