📄 input_key.c
字号:
/* * keykey.c */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h> #include <termio.h> #include <sys/ioctl.h>#include <X11/Xlib.h>#include <X11/Xutil.h>#include <X11/keysym.h>#include <gdk/gdktypes.h>/* For test key combination */#define SELF_DEF1 (-1) /* According to "a" */#define SELF_DEF2 (-2) /* According to "b" */#define SELF_DEF3 (-3) /* According to "c" */typedef struct { const char * key_name; KeySym key_val;}KEY_INFO;KEY_INFO key_info[] = {{"TT_KEY_1" , XK_1},{"TT_KEY_2" , XK_2},{"TT_KEY_3" , XK_3},{"TT_KEY_4" , XK_4},{"TT_KEY_5" , XK_5},{"TT_KEY_6" , XK_6},{"TT_KEY_7" , XK_7},{"TT_KEY_8" , XK_8},{"TT_KEY_9" , XK_9},{"TT_KEY_0" , XK_0},{"TT_KEY_numbersign" , XK_numbersign},{"TT_KEY_asterisk" , XK_asterisk},{"TT_KEY_Up" , XK_Up},{"TT_KEY_Right" , XK_Right},{"TT_KEY_Left" , XK_Left},{"TT_KEY_Down" , XK_Down},{"TT_KEY_Home" , XK_Home},{"TT_KEY_End" , XK_End},{"TT_KEY_Return" , XK_Return},};int main(int argc, char **argv){ Display *display; Window root; XKeyEvent key_press; KeySym keysym; Window focus; int i, max_key_num, revert_to; if(argc !=2) { printf ("\nUsage: %s key_flag\n", argv[0]); return -1; } if (!(display = XOpenDisplay(NULL))) { printf(" XOpenDisplay() error !\n"); return -1; } keysym = atol(argv[1]); max_key_num = sizeof(key_info)/sizeof(KEY_INFO); for (i = 0; i < max_key_num ; i++ ) { if ( keysym == key_info[i].key_val) { printf("this key is clicked: %s\n", key_info[i].key_name); break; } } if(i == max_key_num) { printf("this key is not supported: %x\n", keysym); return -1; } root = DefaultRootWindow(display); if(keysym != 0) { XGetInputFocus(display, &focus, &revert_to); printf( "<< Focus Window=(0x%08lx)>>\n", (long)focus ); memset(&key_press, 0, sizeof(key_press)); key_press.type = KeyPress; key_press.window = focus; key_press.root = root; key_press.subwindow = None; key_press.time = CurrentTime; switch (keysym) { case SELF_DEF1: key_press.keycode = XKeysymToKeycode(display, XK_1); key_press.state |= GDK_SHIFT_MASK; key_press.state |= GDK_MOD1_MASK; break; case SELF_DEF2: key_press.keycode = XKeysymToKeycode(display, XK_2); key_press.state |= GDK_MOD1_MASK; break; case SELF_DEF3: key_press.keycode = XKeysymToKeycode(display, XK_3); key_press.state |= GDK_CONTROL_MASK; break; default: key_press.keycode = XKeysymToKeycode(display, keysym); printf( "<< keycode=(0x%X)>>\n", key_press.keycode ); break; } if(XSendEvent(display, focus, False, KeyPressMask, (XEvent *) &key_press)==0){ printf("@@@XSendEvent Failure!!\n"); }; XFlush(display); } XCloseDisplay(display); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -