媒体按键事件的“倾听”

时间:2013-08-19 17:25:55

标签: keyboard c++

我正在用C ++编写一个应用程序,它需要能够监听Linux中出现的某些按键,即Media Next,Media Previous和Media Play / Pause。

哪些API可以让我听到按键?我假设最终用户正在运行X,但如果他们不是,那么是否有“保证™”的方式来捕获媒体按键,无论如何?

我对编写C ++有点新意,特别是在与Linux有关的地方,但我对Linux并不熟悉(只是习惯于裸机生活)。

1 个答案:

答案 0 :(得分:0)

我不确定你可以在X下使用Xlib event handlers在全球范围内做到这一点。 Sans X,我相信它需要一个内核空间组件,如果你真的真的想这样做,那可能是最好的选择。

然而,这不是一个好主意。你没有说你想做什么,但我认为它可能分为两类:要么你想用这些键来操作您的应用程序(案例A)或您希望您的应用程序监视使用其他使用这些密钥的应用程序(案例B)。

案例A 中,这不是一个好主意,因为将全局击键与操作相关联是窗口管理器/桌面环境的域(关联应该是动态的,而不是硬编码的),当你决定制定自己的规则,忽略这一事实,用户和其他开发人员不太可能欣赏它。如果您希望应用程序响应全局按键,则可以创建客户端和服务器部件,以便客户端可以通过窗口管理器(由用户配置)绑定到按键,然后将消息传递给守护程序服务器。你没有没有充分的理由试图短路或绕过这些现有的约定(例如,因为它表面上使你的任务更容易,或者你真的想要硬编码某些特定的键)。您可以创建一个可以由用户通过其窗口管理器绑定到任何键的应用程序。

案例B 中,您进入了更不友好的领域,因为您基本上要做的是创建keylogger。再说一遍,如果你真的真的决定这样做,你可能想要四处寻找一个键盘记录内核模块(很确定它需要什么)来适应,记住很少有人会想要使用必须的软件诉诸于此(如果只是为了你,这没关系,但它仍然可能是一个糟糕的设计课)。最后,如果你这样做是因为你试图引入一些外部功能来使用与各种媒体键的使用相关联的东西,不要,因为不管是什么东西,它可能是无论如何都没有对这些键进行硬编码:它只是窗口管理器的默认设置。