首先,是的,我知道这个问题 ,但我正在寻找更多的信息。 实际上,我有一个相当类似的问题,那就是我需要能够捕获鼠标/键盘/操纵杆的input,并且我还想尽可能避免使用SDL。 我或多或less想知道是否有人知道在哪里可以得到一些体面的底漆处理来自Linux设备的input,甚至可能是一些教程。 SDL非常适合跨平台的input处理,但是我不打算在SDL中使用任何其他function,所以我想完全删除它。 build议,意见和帮助都表示赞赏。 谢谢!
编辑清晰度:
重点是捕捉鼠标移动,键盘按下/释放,鼠标点击,并可能游戏操纵杆处理。
使用下面的链接看看函数void kGUISystemX :: Loop(void)
这是我的主循环,通过键盘和鼠标在Linux上使用X Windows获得输入。
http://code.google.com/p/kgui/source/browse/trunk/kguilinux.cpp
这是一个片段:
if(XPending(m_display)) { XNextEvent(m_display, &m_e); switch(m_e.type) { case MotionNotify: m_mousex=m_e.xmotion.x; m_mousey=m_e.xmotion.y; break; case ButtonPress: switch(m_e.xbutton.button) { case Button1: m_mouseleft=true; break; case Button3: m_mouseright=true; break; case Button4:/* middle mouse wheel moved */ m_mousewheel=1; break; case Button5:/* middle mouse wheel moved */ m_mousewheel=-1; break; } break; case ButtonRelease: switch(m_e.xbutton.button) { case Button1: m_mouseleft=false; break; case Button3: m_mouseright=false; break; } break; case KeyPress: { XKeyEvent *ke; int ks; int key; ke=&m_e.xkey; kGUI::SetKeyShift((ke->state&ShiftMask)!=0); kGUI::SetKeyControl((ke->state&ControlMask)!=0); ks=XLookupKeysym(ke,(ke->state&ShiftMask)?1:0); ......
如果你知道你的项目只能在Linux下运行(不是Windows甚至BSD中的一个),你应该看看Linux内核的输入系统。 下载内核源代码并阅读Documentation/input/input.txt
,特别是evdev
系统的描述。
对于更高级别(更便携)的解决方案,请阅读Xlib 。 显然它需要一个运行的X服务器,但它具有继承用户的键盘设置的优势。 游戏杆事件不幸的是不包括在内,你可能需要使用内核游戏杆API。
您可以先阅读本教程表格Linux文档项目
你没有说明你的应用程序的目的,但从输入设备读取原始数据很少你想要的,除非你只是为了好玩(或学校项目或其他)
如果您正在编写GUI应用程序(在X11图形环境中运行的应用程序),则可以依赖图形工具包(或原始X)输入驱动程序。
如果你正在编写一个文本模式的客户端,那么readline甚至ncurses都是不错的选择。
您可以从/ dev / input中的文件获得直接输入。 这是最简单的方法,你不需要任何额外的软件。