好吧,我想出瞭如何通過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);
}
從'嘗試輸入函數的手冊頁.h',他們通常會告訴圖書館的名字。如果沒有,它可能來自一個系統庫(儘管如此,我不在Linux機器上)。 – zneak 2012-01-17 05:20:45
哦,等等,你正在尋找'open'函數?它是'libc.so'中的glibc的一部分。 – zneak 2012-01-17 05:28:32
實際上,我真的很想在Linux中使用鍵盤和鼠標輸入的庫名稱。是libc.so嗎? – zezba9000 2012-01-17 06:33:25