Linux input.h (С какой библиотекой я бы связался в .NET) - PullRequest
1 голос
/ 17 января 2012

Я использую Mono C # и хотел бы знать, от чего зависит физическая библиотека "input.h"?Я искал в Google, но ничего не получил.

ПРИМЕЧАНИЕ ОБНОВЛЕНИЕ: цель здесь - получить ввод с клавиатуры и мыши в 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, ...);

Я собирался использовать эту ссылку Ввод с клавиатуры , чтобы начать работу после того, как я найду библиотеку для ссылки на ...

Ответы [ 2 ]

0 голосов
/ 17 января 2012

Хорошо, так что я разобрался, как получить все ключи и ввод от мыши через X11. Я делаю что-то очень похожее в Какао на OSX.

Так что для тех, кто интересуется основами того, как я это сделал, вот, пожалуйста, и дайте мне знать, если вы видите что-то не так с логикой событий 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 голосов
/ 17 января 2012

linux/input.h - это просто набор констант и структур; за ней нет библиотеки, поскольку вы должны сами открыть / получить доступ к подсистеме событий.

...