我正在用 C++ 编写一个应用程序,它需要能够在 Linux 中侦听某些按键,即 Media Next、Media Previous 和 Media Play/Pause。
有哪些 API 可以让我监听按键?我假设最终用户正在运行 X,但如果不是,是否有“保证™”方式来捕捉媒体按键?
我对编写 C++ 有点陌生,尤其是在它与 Linux 相关的地方,但我对 Linux 一点也不陌生(只是习惯于在裸机上生活)。
我不确定您可以在多大程度上使用Xlib 事件处理程序在 X 下全局执行此操作。Sans X,我相信它需要一个内核空间组件,如果你真的很想这样做,那可能是最好的选择。
但是,这不是一个好主意。 您没有说您要做什么,但我认为它可能属于以下两类之一:要么您想使用这些键来操作您的应用程序(案例 A),要么您希望您的应用程序监控另一个应用程序的使用它使用这些键(案例 B)。
情况A,这不是一个好主意,因为将全局击键与操作相关联是窗口管理器/桌面环境的领域(关联应该是动态的,而不是硬编码的),当您决定制定自己的规则时忽略这一事实,用户和其他开发人员不太可能欣赏它。如果您希望您的应用程序响应全局按键,您可以创建客户端和服务器部分,以便客户端可以通过窗口管理器(由用户配置)绑定到按键,然后将消息传递到守护程序服务器。您不要无缘无故地尝试短路或绕过这些现有约定(例如,因为它表面上使您的任务更容易,或者因为您确实想硬编码某些特定键)。您创建一个应用程序,用户可以通过他们的窗口管理器将其绑定到任何键。
在情况 B中,您将进入更不友好的领域,因为您实际上要做的是创建一个keylogger。再说一次,如果你真的决心这样做,你可能想四处寻找一个键盘记录内核模块(很确定这就是它所需要的)来适应,记住很少有人会想要使用必须诉诸这样的(如果它只是为了你,那没关系,但它仍然可能是一个糟糕的设计课程)。最后,如果你这样做是因为你试图引入一些外部功能来使用你想要的东西不要与各种媒体键的使用相关联,因为无论是什么东西,它可能都不会硬编码到这些键:它只是您的窗口管理器的默认设置。