2011-10-05 91 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可能会有所帮助。