2012-01-17 28 views
1

我正在使用Mono C#並希望知道什麼物理庫「input.h」依賴於? 我搜索谷歌,但沒有得到任何東西。Linux input.h(我將在.NET中鏈接到哪個庫)

注意更新:此處的目標是在Linux中獲取鍵盤和鼠標輸入。所以真正的問題是我需要什麼樣的庫來包裝輸入。使用「input.h」獲得輸入是否有任何好的C/C++示例?

在C#中鏈接到像::

[DllImport("libX11", EntryPoint = "XOpenDisplay")] 
public static extern IntPtr XOpenDisplay(IntPtr display_name); 

所以我需要做如上,但與輸入庫同樣的事情,你會做一些庫。喜歡的東西::

[DllImport("libInput ???", EntryPoint = "CreateDevice")] 
public static extern IntPtr CreateDevice(int deviceID, ...); 

我去後,我發現鏈接到哪些庫使用此Keyboard Input鏈接上手...

+0

從'嘗試輸入函數的手冊頁.h',他們通常會告訴圖書館的名字。如果沒有,它可能來自一個系統庫(儘管如此,我不在Linux機器上)。 – zneak 2012-01-17 05:20:45

+1

哦,等等,你正在尋找'open'函數?它是'libc.so'中的glibc的一部分。 – zneak 2012-01-17 05:28:32

+0

實際上,我真的很想在Linux中使用鍵盤和鼠標輸入的庫名稱。是libc.so嗎? – zezba9000 2012-01-17 06:33:25

回答

0

好吧,我想出瞭如何通過X11獲得所有鍵和鼠標輸入。我在OSX上的Cocoa上做了非常類似的事情。

因此,對於任何人想知道我是怎麼做的基本知識,在這裏雅去,讓我知道,如果你看到任何錯誤的X11事件邏輯::

// Enable Capture of close box 
var atom = XInternAtom(d, "WM_DELETE_WINDOW", false); 
XSetWMProtocols(d, w, new IntPtr[]{atom}, 1);  

bool run = true; 
while (run) 
{ 
    while (X11.XPending(d) != 0) 
    { 
     X11.XPeekEvent(d, ref e); 

     switch (e.type) 
     { 
      case (X11.Expose): 
       Console.WriteLine("Window Scaled."); 
       break; 

      case (X11.ClientMessage): 
       Console.WriteLine("Window Closed."); 
       run = false; 
       break; 

      case (X11.KeyPress): 
       Console.WriteLine("Key pressed: " + e.KeyEvent.keycode.ToString()); 
       //run = false; 
       break; 

      case (X11.KeyRelease): 
       Console.WriteLine("Key released: " + e.KeyEvent.keycode.ToString()); 
       //run = false; 
       break; 

      case (X11.ButtonPress): 
       Console.WriteLine("MouseButton pressed: " + e.KeyEvent.keycode.ToString()); 
       //run = false; 
       break; 

      case (X11.ButtonRelease): 
       Console.WriteLine("MouseButton released: " + e.KeyEvent.keycode.ToString()); 
       //run = false; 
       break; 
     } 

     X11.XNextEvent(d, ref e); 

     //Console.WriteLine(e.type.ToString()); 
    } 

    Console.WriteLine("Render GL frame here..."); 

    // Cursor loc 
    /*IntPtr w2, w3; 
    int x, y, x2, y2; 
    uint mask; 
    XQueryPointer(d, w, out w2, out w3, out x, out y, out x2, out y2, out mask); 
    Console.WriteLine(string.Format("{0}, {1}", x, y)); 
    Console.WriteLine(string.Format("{0}, {1}", x2, y2));*/ 

    System.Threading.Thread.Sleep(500); 
} 
0

linux/input.h只是一堆常量和結構的;由於您應該自己打開/訪問事件子系統,因此沒有背後的圖書館。

+0

有沒有一個很好的例子,如何使用input.h使鍵盤和鼠標輸入工作? – zezba9000 2012-01-17 06:31:12

+0

很多。但我不知道任何在C#中。 – 2012-01-17 07:03:36

+0

我對C/C++也很好,所以不需要C#。 – zezba9000 2012-01-17 08:50:47