這樣做是正確的方法是使用Xlib。使用這個庫,你可以這樣寫代碼:
從一個例子摘自:here
while (1) {
XNextEvent(dis, &report);
switch (report.type) {
case KeyPress:
if (XLookupKeysym(&report.xkey, 0) == XK_space) {
fprintf (stdout, "The space bar was pressed.\n");
}
break;
}
}
/*This event loop is rather simple. It only checks for an expose event. XNextEvent waits for an event to occur. You can use other methods to get events, which are documented in the manual page for XNextEvent.*/
/*Now you will learn how to check if an event is a certain key being pressed. The first step is to put case KeyPress: in your switch for report.type. Place it in a similar manner as case Expose.*/
你也可以在映射到鍵盤的專用設備文件中使用poll或select。在我的情況是/dev/input/event1
。
如果您對映射到keyborad的特殊文件有什麼疑問,請閱讀文件/var/log/Xorg.0.log
(搜索單詞keyboard
)。
在這裏你有興趣另一個鏈接:Linux keyboard event capturing /dev/inputX
目前還不清楚,你想分配幾個「熱鍵」組合到後臺應用程序(其中的每一個會做一個特定的操作或將其聚焦)或者您是否需要能夠將長輸入輸入到後臺應用程序中,同時還能將相同的輸入傳遞給當前關注的任何內容?第一種情況可以通過使用XCB(xcb_grab_key)來實現,這是實現這些目標的常規方式,而第二種情況對我來說沒有多大意義。 – resistor