我想知道capslock是否是活动的,我想我可以使用xet
来实现这个目的,使用pipe,通过popen('xset -q | grep Capslock')
我可以找到,但是我想知道在c程序中没有使用命令的方法,有没有办法知道。
还有一件事我想问一下,在这个上下文中,xset
在linux的控制台模式下不工作,我执行alt+ctrl+f1然后登录到那里,如果尝试运行xset -q
这将抛出错误,也许这无法与控制台中的xwindows通信,那么对于这种情况,有什么解决方案。
最佳答案
我想知道卡普洛克是否活跃
你可能想要XkbGetIndicatorState
。例如:
#include <stdio.h>
#include <stdlib.h>
#include <X11/XKBlib.h>
/* Compile this with -lX11 */
int main ()
{
Display *display;
Status status;
unsigned state;
display = XOpenDisplay (getenv ("DISPLAY"));
if (!display)
return 1;
if (XkbGetIndicatorState (display, XkbUseCoreKbd, &state) != Success)
return 2;
printf ("Caps Lock is %s\n", (state & 1) ? "on" : "off");
return 0;
}
或者,您可以使用same approach that is used in xset并使用
XkbGetNamedIndicator
这是一个更通用的函数。关于c - 如何在Linux中以编程方式检测Capslock的状态,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49561510/