Keyboard &引用;“倾听”;媒体关键新闻事件 我正在编写一个C++应用程序,它需要能够侦听到在Linux发生的某些按键,即媒体下一个、媒体前台和媒体播放/暂停。p>

Keyboard &引用;“倾听”;媒体关键新闻事件 我正在编写一个C++应用程序,它需要能够侦听到在Linux发生的某些按键,即媒体下一个、媒体前台和媒体播放/暂停。p>,keyboard,c++,Keyboard,C++,有哪些API可以让我监听按键?我假设最终用户正在运行X,但如果他们没有,是否有“保证”的值™" 无论如何都要抓住媒体按键的方法 我写C++有点新,尤其是它与Linux有关,但我对Linux没有什么新的(只是习惯于裸露的金属).我不确定在X下使用.Sans X可以在多大程度上全局执行此操作。我相信这将需要一个内核空间组件,如果您真的想执行此操作,这可能是最好的选择 但是,这不是一个好主意。你没有说你想做什么,但我认为它可能属于两类:要么你想使用这些键来操作你的应用程序(案例a),要么你想让你的应用

有哪些API可以让我监听按键?我假设最终用户正在运行X,但如果他们没有,是否有“保证”的值™" 无论如何都要抓住媒体按键的方法


我写C++有点新,尤其是它与Linux有关,但我对Linux没有什么新的(只是习惯于裸露的金属).

我不确定在X下使用.Sans X可以在多大程度上全局执行此操作。我相信这将需要一个内核空间组件,如果您真的想执行此操作,这可能是最好的选择

但是,这不是一个好主意。你没有说你想做什么,但我认为它可能属于两类:要么你想使用这些键来操作你的应用程序(案例a),要么你想让你的应用程序监视使用这些键的另一个应用程序的使用情况(案例B)

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


案例B中,您进入了更不友好的领域,因为您实际上要做的是创建一个。而且,如果您真的决心要这样做,您可能需要四处寻找一个keylogging内核模块(非常确定这就是需要的)要适应这种情况,请记住,很少有人会想使用必须采用这种方法的软件(如果只是为了你,那没关系,但这可能仍然是设计方面的一堂糟糕的课)。最后,如果您这样做是因为您试图将一些外部功能引入到与各种媒体键的使用相关联的东西的使用中,请不要这样做,因为不管这是什么东西,它可能不会硬编码到这些键上:这只是您的窗口管理器的默认设置。

这肯定是案例a,我在写一个需要捕捉媒体按键的浏览器插件。有各种各样的WMs(GNOME 3、GNOME 2、Gala、Unity、XFCE、awesome、Compiz等等),我到底怎么可能做到这一点?有没有一种独立于实现的方法来做到这一点?我的应用程序是一个基于浏览器的NPAPI插件,在播放这些键时只会发出JavaScript事件,这具有明显的实际用途。有没有一个框架可以让我轻松地从WM中获取键事件?@TKKocheran:我没有使用过NPAPI,所以我不能在这方面帮你;如果上下文仅适用于浏览器是前置应用程序的情况,请就此询问NPAPI问题——无论如何,API必须可以跨操作系统移植,对吗?[或者:linux上的netscape使用GTK,并且那里有事件处理程序].但如果你想在浏览器不是前置应用程序的情况下使其可操作,我认为你是一只船,但稍微复杂一点:你可能需要在插件中插入一个服务器,这样它就可以监听通过WM与密钥相关联的客户端的呼叫。