首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用xcb xtest生成按键

用xcb xtest生成按键
EN

Stack Overflow用户
提问于 2020-02-09 18:33:27
回答 1查看 156关注 0票数 0

我只是尝试用XCB生成一个活动窗口的按键。我有一些我认为应该有效的代码。当我运行w键时,似乎有1/10的机会,直到我按下和释放w,而其他的9/10没有发生任何事情。下面是代码:

代码语言:javascript
复制
#include <stdio.h>
#include <xcb/xcb.h>
#include <xcb/xtest.h>

int main() {
    xcb_connection_t *conn;

    conn = xcb_connect(NULL, NULL);
    if (xcb_connection_has_error(conn))
        puts("failed to connect\n");

    xcb_test_fake_input(conn, XCB_KEY_PRESS, 25, XCB_CURRENT_TIME, XCB_NONE, 0, 0, 0);

    xcb_flush(conn);
    xcb_disconnect(conn);
}

汇编:

代码语言:javascript
复制
gcc c.c -lxcb -lxcb-xtest

对你有用吗?我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-10 10:02:28

,当我运行w键时,似乎有1/10的机会,直到我按下和释放w之后,w键才会被按住,

您的程序生成一个按键,但没有密钥释放。再用XCB_KEY_RELEASE打个电话。

和其他9/10没有发生任何事情。

我猜想,在调用free(xcb_get_input_focus_reply(conn, xcb_get_input_focus(conn), NULL));之前添加类似xcb_disconnect()的内容就可以解决这个问题。

我的理论是,您可以使用X11服务器进行竞争。当X11服务器指示另一端挂起时,poll()服务器不一定从连接读取挂起的数据。因此,只要发送请求并断开连接,它就会丢失。

我提议的更改会发送另一个请求,并等待来自X11服务器的答复。这就确保了之前的一切都已经得到了处理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60139964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档