linux – 使用X11,如何在忽略某些事件的同时让用户的时间“远离键盘”?

linux – 使用X11,如何在忽略某些事件的同时让用户的时间“远离键盘”?,第1张

概述我正在制作一个需要了解用户闲置时间的应用程序 – 例如,不使用键盘或鼠标. XCB和Xlib都承诺通过各自的屏幕保护程序扩展为我提供空闲时间.这是我在XCB闲暇时间的地方: #include <stdlib.h>#include <xcb/xcb.h>#include <xcb/screensaver.h>static xcb_connection_t * connection;stat 我正在制作一个需要了解用户闲置时间的应用程序 – 例如,不使用键盘或鼠标. XCB和Xlib都承诺通过各自的屏幕保护程序扩展为我提供空闲时间.这是我在XCB闲暇时间的地方:

#include <stdlib.h>#include <xcb/xcb.h>#include <xcb/screensaver.h>static xcb_connection_t * connection;static xcb_screen_t * screen;/** * Connects to the X server (via xcb) and gets the screen */voID magic_begin () {    connection = xcb_connect (NulL,NulL);    screen = xcb_setup_roots_iterator (xcb_get_setup (connection)).data;}/** * Asks X for the time the user has been IDle * @returns IDle time in milliseconds */unsigned long magic_get_IDle_time () {    xcb_screensaver_query_info_cookie_t cookie;    xcb_screensaver_query_info_reply_t *info;    cookie = xcb_screensaver_query_info (connection,screen->root);    info = xcb_screensaver_query_info_reply (connection,cookie,NulL);    uint32_t IDle = info->ms_since_user_input;    free (info);    return IDle;}

但是,这与“ms_since_user_input”建议的行为非常不同.如果我正在观看视频(使用Totem测试),空闲时间将在30秒内重置为0,无一例外.许多游戏都会发生同样的事情,即使它们被暂停也会导致这种情况发生!
使用Xlib,我得到完全相同的行为.

我可能能够改进使用空闲时间的代码,所以这种行为不是一个问题,但我真的想完全摆脱这个问题.如果我只是从上次用户输入事件(并且只有最后一个用户输入事件)获得时间,我更愿意.我不介意使用其他一些库来实现,只要我的程序不会产生大量流量.

您对如何做到这一点有什么想法吗?

解决方法 你用图腾看到的是它试图避免屏幕保护程序踢.它通过定期发送键事件来做到这一点.

你可以在这里找到执行此 *** 作的代码:http://git.gnome.org/browse/totem/tree/lib/totem-scrsaver.c#n318

并且由于屏幕保护程序使用与您使用相同的扩展名,因此您的计数器会达到零.

总结

以上是内存溢出为你收集整理的linux – 使用X11,如何在忽略某些事件的同时让用户的时间“远离键盘”?全部内容,希望文章能够帮你解决linux – 使用X11,如何在忽略某些事件的同时让用户的时间“远离键盘”?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

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

原文地址: https://outofmemory.cn/yw/1025934.html

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

发表评论

登录后才能评论

评论列表(0条)

保存