LinuxX11输入库,无需创建窗口

LinuxX11输入库,无需创建窗口,第1张

Linux / X11输入库,无需创建窗口

好的,如果您使用的是X11,并且想要获取kbd,则需要进行抓取。如果您不是,那么我唯一的好答案是来自终端的ncurses。

这是您从键盘上抓取所有东西并再次释放的方法:

#include <X11/Xlib.h>

int main(int argc, char **argv){   Display *dpy;   XEvent ev;   char *s;   unsigned int kc;   int quit = 0;   if (NULL==(dpy=XOpenDisplay(NULL))) {      perror(argv[0]);      exit(1);   }      XGrabKeyboard(dpy, DefaultRootWindow(dpy),      True, GrabModeAsync, GrabModeAsync, CurrentTime);   printf("KEYBOARD GRABBED!  Hit 'q' to quit!n"          "If this job is killed or you get stuck, use Ctrl-Alt-F1n"          "to switch to a console (if possible) and run something thatn"          "ungrabs the keyboard.n");         for (;!quit;) {      XNextEvent(dpy, &ev);      switch (ev.type) {         case KeyPress: kc = ((XKeyPressedEvent*)&ev)->keypre; s = XKeysymToString(XKeypreToKeysym(dpy, kc, 0));  if (s) printf("KEY:%sn", s); if (!strcmp(s, "q")) quit=~0; break;         case Expose:        while (XCheckTypedEvent(dpy, Expose, &ev))  ; break;         case ButtonPress:         case ButtonRelease:         case KeyRelease:         case MotionNotify:         case ConfigureNotify:         default: break;      }   }   XUngrabKeyboard(dpy, CurrentTime);   if (XCloseDisplay(dpy)) {      perror(argv[0]);      exit(1);   }   return 0;}

从终端运行此命令,所有kbd事件都应命中它。我正在Xorg下对其进行测试,但它使用了古老而稳定的Xlib机制。

希望这可以帮助。

请谨慎对待X之下的争夺。当您不熟悉X时,有时最好启动一个延时过程,该过程将在测试代码时使服务器脱钩,并让它每两分钟坐下来运行并脱钩。它节省了必须杀死服务器或从服务器切换到外部重置状态的麻烦。

在这里,我将留给您决定如何多路复用渲染。阅读XGrabKeyboard文档和XEvent文档以开始使用。如果您在屏幕角落暴露了小窗口,则可以将指针卡在一个角落中以选择控制器。XWarpPointer也可以从代码中将指针推到其中之一。

还有一点:您也可以获取指针和其他资源。如果您坐在前面的盒子上运行着一个控制器,则可以使用键盘和鼠标输入在具有不同渲染器的开放式插座之间切换。通过这种方法,您不再需要将输出窗口的大小调整为小于全屏大小。通过做更多的工作,您实际上可以使用SHAPE和COMPOSITE扩展名将Alpha混合的叠加放置在顶部,以响应用户输入获得不错的叠加功能(这可能算作百合的烫金)。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5019094.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存