在Qt窗口中获取锁屏/解锁事件需要先注册windows通知事件
不然无法在qt的nativeEvent中获取到锁屏/解锁事件
可以在qt窗口的构造函数中调用如下代码:
bool ret = WTSRegisterSessionNotification((HWND)this->winId(), NOTIFY_FOR_THIS_SESSION);
之后我们需要重载qt窗口的nativeEvent,其中的WTS_SESSION_LOCK就是锁屏,WTS_SESSION_UNLOCK就是解锁事件
bool CMyWidget::nativeEvent(const QByteArray &eventType, void *message, long *result)
{
MSG* msg = (MSG*)message;
switch (msg->message)
{
case WM_WTSSESSION_CHANGE://判断登录、注销、锁屏等
{
switch (msg->wParam)
{
case WTS_SESSION_LOCK:
//TODO
break;
case WTS_SESSION_UNLOCK:
//TODO
break;
default:
break;
}
break;
}
default:
break;
}
return 0;
}