#ifndef SCREENLOCKDETECTOR_H #define SCREENLOCKDETECTOR_H #include #include #include #include #include /** * @brief 屏幕锁定检测器类 * * 通过监听Linux系统的DBus信号来检测屏幕锁定/解锁状态 * 支持多种桌面环境:GNOME, KDE, XFCE等 */ class ScreenLockDetector : public QObject { Q_OBJECT public: explicit ScreenLockDetector(QObject *parent = nullptr); ~ScreenLockDetector(); /** * @brief 获取当前锁屏状态 * @return true 如果屏幕已锁定,否则返回 false */ bool isScreenLocked() const; /** * @brief 初始化DBus连接 * @return true 如果初始化成功,否则返回 false */ bool initialize(); signals: /** * @brief 屏幕锁定信号 * 当检测到屏幕被锁定时发出 */ void screenLocked(); /** * @brief 屏幕解锁信号 * 当检测到屏幕被解锁时发出 */ void screenUnlocked(); /** * @brief 锁屏状态改变信号 * @param locked true表示已锁定,false表示已解锁 */ void lockStateChanged(bool locked); private slots: /** * @brief 处理GNOME屏幕保护程序的DBus信号 * @param active 屏幕保护程序是否激活 */ void onScreenSaverActiveChanged(bool active); /** * @brief 处理登录管理器的会话锁定信号 */ void onSessionLocked(); /** * @brief 处理登录管理器的会话解锁信号 */ void onSessionUnlocked(); private: /** * @brief 设置锁屏状态 * @param locked 新的锁屏状态 */ void setLockState(bool locked); /** * @brief 连接到GNOME屏幕保护程序的DBus接口 * @return true 如果连接成功 */ bool connectToGnomeScreenSaver(); /** * @brief 连接到登录管理器的DBus接口 * @return true 如果连接成功 */ bool connectToLoginManager(); /** * @brief 查询当前的锁屏状态 */ void queryCurrentLockState(); private: bool m_isLocked; // 当前锁屏状态 QDBusInterface *m_gnomeInterface; // GNOME屏幕保护程序接口 QDBusInterface *m_loginInterface; // 登录管理器接口 bool m_gnomeConnected; // GNOME接口是否连接成功 bool m_loginConnected; // 登录管理器接口是否连接成功 }; #endif // SCREENLOCKDETECTOR_H