我正在使用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链接开始...
答案 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);
}