qt4 - 使用 Qt 4.6 钩住键盘上的键和组合键

标签 qt4 keyboard events hook qt4.6

假设我有一个无窗口应用程序,它的任务栏上只有一个图标(Windows、Mac OS X 和 Linux)。我希望它捕获一些键和组合键,比如右 Control + 右 Shift。输入正确的组合后,它会执行一些操作,例如截屏。我可以执行无窗口应用程序、任务栏上的图标和屏幕捕获,但我不知道如何全局监视键盘的组合键。请各位指教。非常感谢任何帮助或提示!提前致谢!

最佳答案

系统范围的 key 抓取是一个棘手的主题,但系统范围的 key Hook 甚至更棘手。每个操作系统/GUI 都有自己的解决方案,至少可供抓取。 Qt4 没有公开这样的功能,但是Qt eXTension library解决了它的问题 QxtGlobalShortcut 。这是一个很好的包装:

因此,您可以获取显式的组合键,即特定的键和修饰符(XGrabKey() 允许更多),而其他应用程序无法获取。这里不支持按键序列,即连续的按键组合。

<小时/>

键盘 Hook 功能更强大,因为它允许查看输入事件(甚至过滤它们)。它不仅被键盘记录器使用,而且它们是这里的典型关联。

如果您使用 Windows,那么您可以阅读:

在 X11 中情况要复杂得多。您可能至少想阅读两页:

有一个X Event Interception Extension ,但没有得到维护并最终被删除。

希望这可以在没有 X11 基础设施的帮助下完成。 Linux 2.6内核中有一个“事件接口(interface)”,称为evdev ,可以在这里利用。详细内容可以参见logkeys Linux keylogger的源代码。也可以使用类似于 evdev 的方法来完成。查看我的 PoC 项目: kaos - 关键事件屏幕显示。

而且我没有 Mac,所以没有进一步的引用。 ;)

关于qt4 - 使用 Qt 4.6 钩住键盘上的键和组合键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2980141/

相关文章:

c# - 注册事件时执行操作?

python - 使用 QVTKWidget

qt - 如何使用 qmake 生成 .sln/.vcproj

Qt4:如何在 QTreeView 中获取选定的索引

C++ SFML - 如何读取同时按下的 SFML 中的两个键?

apache-flex - 如何找出语言中按下的字符?

c# - 当属性或变量改变值时触发事件

c++ - 从 QString 中删除前导零的最佳方法

windows - 在 Windows 中使用 CAPS LOCK 作为 Vim 模式切换键

asp.net - 高级: How many times does HttpModule Init() method get called during application's life?