ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

如何使用C/C++获得num lock状态?

2019-08-26 17:06:34  阅读:221  来源: 互联网

标签:c-3 c linux gtk x11


我已经阅读了Gdk论坛链接,该链接表示从版本3.0开始实现获取num lock state api.但我使用的是2.4版本,因为我需要支持更低版本的Linux版本,因此我无法更新到3.0版本.这是讨论链接:

http://mail.gnome.org/archives/commits-list/2010-July/msg00259.html

那么,有没有其他方法可以使用内部Linux命令获得num lock状态?

问候,
iSight摄像头

解决方法:

获取NumLock状态的示例代码.让foo.c成为:

#include <stdio.h>
#include <X11/Xlib.h>

int main(void) {  
   Display *dpy = XOpenDisplay(":0"); 
   XKeyboardState x;
   XGetKeyboardControl(dpy, &x);
   XCloseDisplay(dpy);
   printf("led_mask=%lx\n", x.led_mask);
   printf("NumLock is %s\n", (x.led_mask & 2) ? "On" : "Off");
   return 0;
}

然后,在戴尔笔记本电脑上使用CentOS 5进行测试:

gcc foo.c -o foo -lX11
foo
led_mask=2
NumLock is On

或者你可以用popen做一些事情(“xset q | grep LED”);.

面具的第二位对于NumLock来说相当常见,但我不相信它是有保证的.

原始答案:一个很好的起点是xev,可用约20年:

   xev

您可以通过以下方式解码关键事件:

foobar (XKeyEvent *bar) {
   char dummy[20];
   KeySym key;
   KeySym keyKeypad;
   XLookupString(bar, dummy, sizeof dummy, &key, 0);
   keyKeypad = XKeycodeToKeysym(..., bar->keycode, NUMLOCK_Mask);
   if (IsKeypadKey(keyKeypad))
      ...;
   // ...
}

标签:c-3,c,linux,gtk,x11
来源: https://codeday.me/bug/20190826/1732083.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有