如何在 Qt 中检测 Windows 事件?

Posted

技术标签:

【中文标题】如何在 Qt 中检测 Windows 事件?【英文标题】:How to detect a Windows event in Qt? 【发布时间】:2014-12-04 11:15:19 【问题描述】:

我正在尝试构建一个应用程序来检测 Windows 事件,特别是与多媒体相关的事件(播放视频、播放音频和图像)。

例如,如果打开 Windows Media Player,则应检测相关事件。

【问题讨论】:

对于媒体播放器,可用的事件是here,但正如 FIO(和 AFAIK)所说,您的需求没有真正的普遍支持。顺便说一句,关于处理获胜事件的问题,请查看QWidget::nativeEvent。 如果用户选择 AcmeMusicPlayer 作为音频文件的默认应用程序会怎样?另外,如果用户在媒体播放器上放了整张专辑,您是否需要每个项目的事件?这严重低估了(无论确切要求如何都是一个问题) 友情提醒回答者,请不要用答案来回答此类问题。我们只尝试在 qt 标签中回答正确的问题。 【参考方案1】:

没有“事件”。

您可以检测媒体播放器(通过 winapi ::FindWindow)或图像查看器的启动。

【讨论】:

【参考方案2】:

我认为仅使用 QT 的内置函数是不可能做到这一点的。您必须使用 Windows API。根据您实际想要执行的操作,这可能会变得非常复杂。 如果您只想检查某个应用程序是否已经启动,您可以使用FindWindow 函数。我建议使用 qt 计时器来创建可用于检查窗口是否已打开的信号。QTimer::singleShot(200, this, SLOT(checkForMediaPlayer())); 只需将它与 checkForMediaPlayer 成员函数一起添加到您的 QObject 中,一旦检测到 MediaPlayer,它将执行您想要的任何操作。

【讨论】:

以上是关于如何在 Qt 中检测 Windows 事件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Qt 中模拟适用于 Linux 和 Windows 的所有鼠标和键盘事件?

如何在 Qt 中将事件过滤器安装到 WindOWS 窗口?

如何检测我的应用程序在 Qt 中失去焦点?

如何在 QT 或 windows API 中连接到无线 WIFI 网络? [关闭]

如何让 .NET Windows 服务检测登录、注销和切换用户事件?

如何在启用自动隐藏的 Windows 中检测任务栏的高度和方向?