如何检测屏幕锁定(Qt5,C ++,Windows,OSX)

时间:2017-06-10 19:19:10

标签: windows macos qt5

在我的Qt5 C ++客户端中,我想检测运行Windows或OSX的用户何时锁定了屏幕,然后同时锁定我的客户端应用程序。

我还没有遇到提供此功能的Qt5类,所以我想知道是否需要编写特定于操作系统的库。有没有人有这样的经历?

谢谢!

1 个答案:

答案 0 :(得分:0)

在Windows上,您可以使用以下代码:

mywidget.cpp

#include "mywidget.h"
#include <Windows.h>
#include <WtsApi32.h>
#include <QDebug>

MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{
    WTSRegisterSessionNotification((HWND)this->winId(), NOTIFY_FOR_THIS_SESSION);
}

MyWidget::~MyWidget()
{
    WTSUnRegisterSessionNotification((HWND)this->winId());
}

bool MyWidget::nativeEvent(const QByteArray &eventType, void *message, long *result)
{
    if (eventType != "windows_generic_MSG") return false;

    MSG *msg = static_cast<MSG*>(message);
    switch (msg->message) {
    case WM_WTSSESSION_CHANGE:
        qDebug() << "session change: " << msg->wParam;
    }
    return false;
}

project.pro

...
LIBS += -lwtsapi32
...

reference1 reference2