Tag: x11

X11等待并获取剪贴板文本

我必须监控X11剪贴板。 目前,我每5秒请求一次ClipBoard选择,然后我对从剪贴板返回的文本进行哈希处理,并将其与上次检查中的哈希计算进行比较。 如果哈希不一样,我分析文本内容并做一些事情…… 我不喜欢我的方法。 我来自Windows,并且使用winapi,它是内核,当剪贴板发生变化时会通知你的程序,并且效率更高! 我只是想知道当剪贴板发生变化时,X11是否可以将您的程序通知为winapi? 使用X11检查剪贴板修改的更有效方法是什么?

Gtk + / X11:有和没有复合管理器的半透明窗口?

我需要一些代码来制作我的窗口(最好是所有小部件)半透明。 我知道我可以使用gtk_window_set_opacity(),但它只在复合管理器运行时才有效,但如果没有呢? 我已经google了很多,发现很多代码甚至没有编译,不起作用或只是一个概念certificate。 没有充实的解决方案。 我不想乱用X11 Xlib糟糕的API(我只是没时间学习它)。 哪里可以获得这样的库/代码片段?

XPending周期使CPU 100%

美好的一天! 我有一些麻烦制作一个xlib项目。 这是我的项目的结构: [ Init ] [ Making some stuff ] [ Creating a timer thread (see code below) ] [ Main cycle (see code below) ] 当用户按下任何按钮时,我将线程中的标志设置为类似true的值,并且每隔n次开始将CustomMessage发送到窗口。 while (warehouse.destroyflag != SML_DEAD) { if (XPending(warehouse.display)) { XNextEvent(warehouse.display, &event); 但这里有一些问题。 随着当前主循环的实现,我有大约100%的CPU负载 。 但是当我从代码中删除XPending行时,负载大约为0%。 但在这种情况下,我没有从另一个线程到达正确的CustomMessage。 我找到了Xlib程序的示例代码并对其进行了编译。 它有同样的问题,CPU负载约为100%。 这是样本: http://paste.bradleygill.com/index.php?paste_id=4897 这是我的主题代码: http : //paste.bradleygill.com/index.php?paste_id = 4898 这是我的周期: http […]

全球alt +空间热键抓取 – 奇怪的键盘焦点行为

我正在使用xcb_grab_key获取Alt+Space全局热键,如下所示: xcb_key_symbols_t *keysyms = xcb_key_symbols_alloc(c); xcb_keycode_t *keycodes = xcb_key_symbols_get_keycode(keysyms, XK_space), keycode; // add bindings for all screens xcb_screen_iterator_t iter; iter = xcb_setup_roots_iterator (xcb_get_setup (c)); for (; iter.rem; xcb_screen_next (&iter)) { int i = 0; while(keycodes[i] != XCB_NO_SYMBOL) { keycode = keycodes[i]; xcb_grab_key(c, true, iter.data->root, XCB_MOD_MASK_ANY, keycode, XCB_GRAB_MODE_SYNC, XCB_GRAB_MODE_SYNC); i += 1; } } 然后在Qt的QAbstractNativeEventFilter子类中,我处理它并在密钥匹配Alt+Space发出Qt信号: xcb_keycode_t […]

我想制作闪屏,现在我有两个问题?

1:我想要一个闪屏,但我只有一个窗口?所以,如何处理像parm一样 2:我已经用了一段时间(!完成)来绘制窗口,以便如何突破一个函数或者其他 这是我的代码,对你来说很多 g ++ -o m_splash m_splash.cpp -lX11 -lImlib2 #include #include #include #include int main() { Imlib_Image m_img; Display *m_dpy; Pixmap m_pix; Window m_root; Screen *scn; int m_width, m_height; const char *filename = “/home/ang/so_zt/w.png”; m_img = imlib_load_image(filename); if(!m_img) { printf(“%s\n”,”init m_img faild”); } imlib_context_set_image(m_img); m_width = imlib_image_get_width(); m_height = imlib_image_get_height(); m_dpy = XOpenDisplay(NULL); if(!m_dpy) […]

XEventsQueued等效于xcb

我在XCB中读到了“ Need for XEventsQueued(display,QueuedAfterReading) ”,但答案指定了一个修改内部事件队列的函数( xcb_poll_for_queued_event )。 我需要一个与XEventsQueued(display, QueuedAfterReading) 完全相同的函数。 如果在使用XEventsQueued地方完成,修改事件队列会破坏我正在编写的代码。 什么是xcb中的等效函数或代码块?

如何异步地异步停止X11事件循环

我有一个小的X11应用程序,它有两个线程。 在一个线程中,我正在使用XGrabKey()然后在循环XNextEvent()侦听X11事件。 另一个线程正在做其他事情并且与X11无关。 这是相关线程的代码: #include #include #include #include #include #include volatile bool loop = true; void keyGrab(void) { Display *display = XOpenDisplay(0); Window root = DefaultRootWindow(display); int keycode = XKeysymToKeycode(display, XF86XK_AudioPlay); XGrabKey(display, keycode, AnyModifier, root, False, GrabModeAsync, GrabModeAsync); XSelectInput(display, root, KeyPressMask); while (loop) { XEvent event; XNextEvent(display, &event); switch (event.type) { case KeyPress: puts(“Play key […]

如何在C应用程序中的X11上设置鼠标光标

我有一个相当大的,相当古老的C应用程序,已经移植到Linux。 我负责让鼠标光标正常工作,但有一些问题。 我能够将我们需要的大多数游标转换为使用XFontCursor提供的标准游标,方法如下: gCursorTable[waitCurs] = XCreateFontCursor(gDisplay, XC_watch); … XDefineCursor(gDisplay, WHostWindow(w), gCursorTable[cursor]); XFlush(gDisplay); 这对于在XFontCursor提供的极其有限的(有用)游标列表中具有类似物的游标来说很好,但是我还想设置其他内置主题游标。 例如,我希望能够在我的应用程序中将光标设置为bd_double_arrow(它包含在每个光标主题中,并且是Windows的标准对角线大小调整光标),但显然你不能用XCreateFontCursor做到这一点。 这似乎很基本,但对于我的生活,我找不到任何关于如何做的描述。 我只是想知道其他X11应用程序如何设置游标,因为它们显然是从全局主题获取它们而不仅仅是使用XCreateFontCursor。

发送X11点击事件不适用于某些窗口

除了在某些窗口中,以下代码片段大部分时间都有效。 例如,在最新的Ubuntu下,它无法用于选择文件资源管理器中的文件夹。 它似乎适用于其他任何地方,但这种差距很大。 我怀疑它与我如何使用XQueryPointer有关,但我几乎尝试了所有可以找到的例子。 如果我使用计算机的鼠标,它工作正常。 仅供参考:我已经尝试过这些问题的答案: 发送程序化事件 获取鼠标输入,但它们没有任何不同…… 这是代码: #include #include #include void SendClick(int button, int down) { Display *display = XOpenDisplay(NULL); XEvent event; if(display == NULL) { return; } memset(&event, 0, sizeof(event)); event.xbutton.button = button; event.xbutton.same_screen = True; event.xbutton.subwindow = DefaultRootWindow (display); while (event.xbutton.subwindow) { event.xbutton.window = event.xbutton.subwindow; XQueryPointer (display, event.xbutton.window, &event.xbutton.root, &event.xbutton.subwindow, &event.xbutton.x_root, […]

在C中不成功使用popen()?

我可以运行以下命令 xwd -root | xwdtopnm | pnmtojpeg > screen.jpg 在Linux下的终端,它将生成我当前屏幕的截图。 我尝试使用以下代码执行以下操作: #include #include int main() { FILE *fpipe; char *command=”xwd -root | xwdtopnm | pnmtojpeg”; char line[256]; if ( !(fpipe = (FILE*)popen(command,”r”)) ) { // If fpipe is NULL perror(“Problems with pipe”); exit(1); } while ( fgets( line, sizeof line, fpipe)) { //printf(“%s”, line); puts(line); […]