2011-10-05 90 views
3

我正在嘗試開發一個應答程序,它可以響應多個數字筆(IRIS筆),以便任何筆在紙上寫入;我將輸出中繼到一個屏幕。從而爲我自己製作一個多輸入白板。即使在失去焦點之後在X11中捕獲事件

在Ubuntu中,這些筆被識別爲鼠標,因此可以像處理鼠標事件一樣進行處理。

因此,現在我打算做的是使用XLib在C/C++中處理這些事件,並使用JNI回調將這些事件傳遞給Java Swing應用程序。我能夠做到這一點,但是當X11窗口失去焦點時,沒有事件傳輸到Swing框架。我也嘗試在X11中使用根窗口,但它似乎不起作用。

任何幫助將非常感激。提前感謝你。

+0

有沒有簡單的方法來做到這一點。 一個着名的'xeyes'程序只是定期輪詢鼠標,這可能是最簡單的選擇。 –

回答

2

如何在Java之一的前面最大化C/X11窗口,並使其透明?您應該能夠看到Java窗口,同時仍然關注C/X11。

由於您使用的是Ubuntu,因此您可以使用Compiz的「不透明度,亮度和飽和度」插件來實現此目的。它位於compiz-plugins-main包中,您可以使用Compiz設置管理器(來自compizconfig-settings-manager包)激活它。當你激活插件時,默認情況下alt + wheel被綁定,以改變焦點窗口的透明度。

+0

謝謝你的答案。我以前用'transset'來設置我的X11窗口的透明度,但它對我沒有用。但是我剛剛嘗試了CCSM,它的工作非常出色,現在我不必擔心我的焦點丟失問題。 –

1

請嘗試直接閱讀鼠標。我不記得確切的位置,但你應該在'/ dev/input/mouseX'這樣的東西中找到它,其中X是你的設備的編號,從0到n-1設備。

當你讀取數據包,你的應用程序應該阻塞,直到鼠標移動,然後你的讀取函數將返回一個描述增量的原始鼠標數據包(在你的情況下,這可能比屏幕座標更有用)和鼠標按鈕狀態。

的原始數據包可以如下描述解碼:http://www.computer-engineering.org/ps2mouse/

+0

謝謝你的幫助。這可能是做到這一點的可能方式之一。 –

+1

請注意,如果您使用'/ dev/input',則必須以root用戶身份運行您的應用程序,因爲這樣也會允許任何人竊聽當前用戶。 –

1

創建一個模式對話框並將其設置爲XmDIALOG_SYSTEM_MODAL(屬性的實際名稱取決於您的工具包:Motif,Gtk,Qt,...)。像這樣的對話框阻擋了整個顯示器,並且永遠不會失去焦點。

缺點是,當這個對話框在屏幕上時,你不能做任何事情。

This entry in the X11 FAQ可能會有所幫助。