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

编辑:作为一个例子,amarok有全局快捷方式,例如,如果你将一个键组合映射到一个动作(让我们说Ctrl - +Ctrl+ )你可以在按下键时执行该动作。 如果我将Ctrl - +映射到音量增加动作,每次按ctrl - +音量应增加一定量。

谢谢

===============>>#1 票数:4 已采纳

您的热键需要全球化程度如何? 它们足以让它成为X会话的全球性吗? 在这种情况下,您应该能够打开Xlib连接并监听所需的事件。

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

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

===============>>#2 票数:3

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

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

===============>>#3 票数:2

你应该看一下xbindkeys的源代码。

Xlib编程非常神秘,文档很难找到,并且存在微妙的可移植性问题。 你最好复制一些经过强化处理的代码。

===============>>#4 票数:1

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

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

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

===============>>#5 票数:0

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

事实上,'xterm'程序或你在UNIX机器上使用的任何衍生产品都被正确地称为终端模拟器 - 它的行为(从您的角度和操作系统的角度来看)就像那些老式的一样。终端机器。

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

man 5 terminfo

在Linux系统上获取更多信息。

现在,好消息是你不需要对终端功能等进行过多的混乱,以使命令行应用程序通过输入或窗口功能执行有趣的操作。 有一个图书馆, 诅咒 ,这将有所帮助。 抬头

man 3 ncurses

在Linux系统上获取更多信息。 你可能会找到一个关于在线使用curses的体面教程。

  ask by Vhaerun translate from so

未解决问题?本站智能推荐:

5回复

在Windows / Linux / Mac上的Java程序中对全局热键有反应吗?

Java6应用程序位于系统托盘中。 需要使用热键(例如,Super-G或Ctrl-Shift-L等)将其激活,并执行某些操作(例如,显示输入框)。 我该怎么做: Windows(XP或Vista) OS / X Linux(Gnome或KDE)
1回复

Eclipse:Ctrl + Shift +? Linux / KDE中的热键?

我最近在Arch Linux / KDE 4机器上安装了Eclipse Helios(Java开发人员版,来自www.eclipse.org的香草),以帮助大型Java项目中的导航。 问题是,Eclipse中的许多键绑定都倾向于使用Ctrl + Shift作为修饰符,这与我用来切换键盘布局的组
3回复

在Linux上的python中侦听全局键组合

我刚刚编写了一个小程序,每隔几分钟就会从flickr下载一个新的墙纸。 现在,我想添加“喜欢”墙纸的功能,因此它比不喜欢或不喜欢的墙纸更常出现。 我想为此功能分配一个全局键盘快捷键。 例如:如果按ctrl + 7,它将在Python中执行某种“赞”功能。 是否有任何库(例
2回复

使用c ++库在Linux中注册热键

有没有用C ++编写的Linux库,可以为我的应用程序注册全局热键? 谢谢。
3回复

选择一个热键

在我的应用程序中,我想要一个热键,例如ctrl + alt + d 。 我不想破坏任何操作系统快捷方式或第三方程序(例如启动器)。 该程序可在Windows,Linux和Mac上运行。 选择不破坏其他程序的热键的最佳方法是什么? 编辑:这是指向用户隐藏开发人员访问权限。
1回复

无法捕获全局热键(不是基于窗口的应用程序)

我正在尝试不使用JFrame类的任何窗口来全局捕获某些键盘事件,它应该是控制台应用程序或服务(守护程序)。 这是我有的代码: 但是,当我启动它时,除了按Ctrl+F时,它只打印“正在侦听热键...”。 即使将重点放在其他应用程序或桌面上,结果仍然相同。 我怎么做错了?
2回复

我可以在Ubuntu中的Qt应用程序中添加全局快捷方式钩子吗?

我的应用程序位于任务栏中,我希望它响应全局热键来显示其对话框,例如Google桌面搜索。 它不必跨平台。
1回复

为什么在Win32中使用`GetAsyncKeyState()`时我的热键会出错?

main.c中: 我尝试过在调试和发布模式之间,在mingw和VS编译器之间进行更改,并且我对C和C ++都感到厌倦。 在所有情况下都会发生相同的错误。 想法是使热键为Control +1。每当用户同时按下Control键和1键时,我都希望代码为printf("Set grena
2回复

Linux:是否可以使用静态链接的二进制文件进行一些面向插件的编程?

假设我们有一个很小的嵌入式系统,它仅由linux内核和一个作为init运行的静态链接的二进制文件组成。 我们希望二进制文件能够在运行时动态加载外部插件。 在Linux上可能吗? dlopen仅适用于共享库,并且动态链接会导致静态二进制文件不会将任何符号导出到外界,那么还有其他方法可以这
2回复

有没有办法将C ++源代码编译成二进制文件,以便gdb可以看到它?

假设我有一台构建机器和测试机器,源代码仅在构建机器上。 (Linux)的 我有一个调试版本的C / C ++可执行文件,我想在测试机上用gdb运行它。 在测试机器上运行的调试器中,它仍在查找不存在的实际源文件。 有没有办法让g ++实际包含可执行文件中的源代码以及其他调试信息