2008-09-24 56 views
5

首先,是的,我知道this question,但我在寻找更多的信息。实际上,我有一个相当类似的问题,因为我需要能够捕获鼠标/键盘/操纵杆的输入,并且我还想尽可能避免SDL。我或多或少想知道是否有人知道我可以在哪里获得一些体面的底层处理从Linux设备的输入,甚至可能是一些教程。 SDL非常适合跨平台输入处理,但我不打算在SDL中使用任何其他功能,所以我想完全删除它。建议,意见和帮助都是值得赞赏的。谢谢!在Linux中捕获输入

编辑为了清楚:

的点是捕获的鼠标移动,键盘按下/释放,鼠标点击,并且潜在地操纵杆操纵一个游戏。

+0

我觉得这个问题很广泛。直接与输入设备交谈? (通常对于高级应用程序来说是一个坏主意。)使用X? (如果X,控制台模式下的鼠标需要Xlib,XCB,Gtk +,Qt,...)GPM吗? – asveikau 2012-12-24 01:42:38

回答

5

使用下面看看链接的函数void kGUISystemX ::环路(无效)

这是我在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); 
...... 
1

你没有说明你的应用程序的目的,但读取原始数据开始是很少,你想要什么,除非你只是为了好玩(或学校项目或其他)

如果你正在编写一个GUI应用程序(一个在X11图形环境中运行的应用程序),你可以依赖图形工具包(或原始X)输入驱动程序。

如果你正在编写一个文本模式的客户端,那么readline或甚至ncurses可能是不错的选择。

2

如果您知道您的项目只能在Linux下运行(不是Windows或甚至是BSD之一),您应该查看Linux内核的输入系统。下载kernel source并阅读Documentation/input/input.txt,特别是evdev系统的说明。

对于更高级别(更便携)的解决方案,read up on Xlib。显然它需要一个正在运行的X服务器,但它具有继承用户键盘设置的优势。不幸的是游戏杆事件不包括在内,你可能需要为这些游戏杆使用内核游戏杆API。

-1

您可以从位于/ dev /输入文件获得直接输入。这是最简单的方法,而且你不需要任何额外的软件。