2

是否可以监听某个热键(例如:)Ctrl-I然后执行特定操作?我的应用程序是用 C 编写的,只能在 Linux 上运行,并且没有 GUI。是否有任何图书馆可以帮助完成此类任务?

编辑:例如,amarok 具有全局快捷方式,因此例如,如果您将键组合映射到操作(比如说和) Ctrl-+,您可以在按下键时执行该操作。如果我要映射到音量增加动作,每次按下音量应该增加一定量。Ctrl+Ctrl-+ctrl-+

谢谢

4

5 回答 5

4

您的热键需要多全球化?对于 X 会话来说,它们是全球性的就足够了吗?在这种情况下,您应该能够打开 Xlib 连接并监听您需要的事件。

通常 X 中的键盘事件被传递到当前具有焦点的窗口,并向上传播直到它们被处理。显然这不是我们想要的。我们需要在任何其他窗口访问它之前处理该事件。我们需要使用热键的键码和修饰符在根窗口上调用XGrabKey来完成此操作。

我在这里找到了一个很好的例子。

于 2008-09-16T17:46:19.397 回答
3

我认为smoofra在这里是正确的;您正在寻找使用 X 注册一个全局热键,以便您可以拦截按键并采取适当的措施。 Xlib可能是你想要的,我认为XGrabKey是函数。

恐怕不容易学;我确实找到了这个看起来很有用的例子:TinyWM。我还找到了一个使用 Java/JNI 的示例(访问相同的底层 Xlib 函数)。

于 2008-09-16T18:08:11.183 回答
2

您应该查看xbindkeys的源代码。

Xlib 编程相当晦涩难懂,文档很难找到,并且存在一些微妙的可移植性问题。你最好复制一些久经考验的代码。

于 2008-09-16T18:31:14.110 回答
1

一种方法是让您的应用程序在某个端口或套接字文件上侦听传入请求。

然后,您可以编写一个连接到该端口或套接字文件并将命令发送到正在运行的应用程序的小型客户端应用程序。

然后,您可以配置窗口管理器以绑定某些组合键来启动您的小型客户端应用程序。

于 2008-09-16T17:50:11.883 回答
0

在 UNIX 中,您可以通过终端访问命令行 shell 。这可以追溯到人们通过直接连接到机器的终端(例如通过串行电缆)访问他们的大型共享计算机的时代。

事实上,“xterm”程序或您在 UNIX 机器上使用的任何衍生程序都被恰当地称为终端仿真器- 它的行为(从您和操作系统的角度来看)很像那些老式的终端机。

这使得以有趣的方式处理输入有点复杂,因为有许多不同类型的终端,并且您的 UNIX 系统必须了解每种类型的功能。这些功能传统上存储在termcap文件中,我认为更现代的系统使用terminfo代替。尝试

man 5 terminfo

在 Linux 系统上了解更多信息。

现在,好消息是您不需要对终端功能等做太多的麻烦,就可以拥有一个命令行应用程序,它可以通过输入或窗口功能来做有趣的事情。有一个图书馆,curses,会有所帮助。抬头

man 3 ncurses

在您的 Linux 系统上获取更多信息。您可能会找到一个不错的在线使用诅咒教程。

于 2008-09-16T17:46:23.530 回答