是否有一个命令行实用程序可以监听操作系统范围的击键并通过stdout告诉我?

时间:2010-08-06 21:07:46

标签: windows macos winapi console air

我正在开发一个应用程序,我想通过按键组合触发我的应用程序中的功能,当它不在焦点时。

因为我正在AIR中开发我的应用程序,所以我无权收听全局击键。但是,我可以从应用程序接收STDOUT。所以,我正在寻找能够给我这种​​能力的实用工具。我正在寻找Windows和OSX(跨平台宝贝!)

3 个答案:

答案 0 :(得分:1)

对于Windows,您可以编写一个简单的应用程序来安装键盘钩子并将有关键事件的信息打印到stdout。请参阅SetWindowsHookEx

答案 1 :(得分:1)

对于Windows:

我不知道任何应用程序,但这里有一些想法可能在100行代码中工作...

我会避免使用SetWindowsHook,因为这会将您的代码注入所有应用程序。 (因为我编写了很糟糕的钩子,因此我花了很多时间调试崩溃转储和错误...)

您可以使用DirectInput(旧游戏键盘API)编写控制台应用程序。我相信你只需将DISCL_BACKGROUND和DISCL_NONEXCLUSIVE传递给IDirectInputDevice8 :: SetCooperativeLevel调用。使用IDirectInputDevice8 :: SetEventNotification设置事件句柄,这样就不会进入繁忙的等待循环轮询输入。这应该做到这一点。我很久以前在Windows 98上为我的应用做过一次这样做,效果非常好。但是DirectInput非常接近于被弃用的技​​术,所以YMMV。

另一种简单的黑客攻击方式是让你的应用创建一个隐藏的窗口,为所有键盘调用RegisterHotkey,以及泵窗口消息。您的wndproc将获得一条WM_HOTKEY窗口消息,您可以使用该消息生成一条消息给stdout。

最简单的方法,但稍微容易出错,而且cpu价格昂贵就是让你的控制台应用程序进入循环并调用GetKeyboardState。这将返回所有键上下键盘的整个状态。您必须弄清楚如何将每个轮询转换为逻辑按键。我建议在民意调查之间休息几毫秒,这样你就不会破坏整个系统的性能。

在OSX上无法帮助你。

答案 2 :(得分:1)

对于Windows,这是一个可以收听键盘的实用程序。 http://www.dynamicnetservices.com/~will/academic/textinput/keycapture/