Linux input.h(我将在.NET中链接到哪个库)

时间:2012-01-17 05:12:18

标签: linux input mono keyboard hid

我正在使用Mono C#并想知道“input.h”所依赖的物理库是什么? 我搜索谷歌但没有得到任何东西。

注意更新:这里的目标是在Linux中获取键盘和鼠标输入。所以问题是我需要为输入包装什么库。是否有任何好的C / C ++示例使用“input.h”获取输入?

在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链接开始...

2 个答案:

答案 0 :(得分:0)

linux/input.h只是一堆常量和结构;因为您应该自己打开/访问事件子系统,所以它背后没有库。

答案 1 :(得分: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);
}