window下检测有没程序进入全屏(full screen)Qt版本

4 篇文章 0 订阅

网上有很多山寨方法,但是以下方法是最可靠的。不过目前网上的例子都是MFC版本。下面是QT的版本。

文件:wdget.h的代码

//widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <windows.h>
namespace Ui {
class Widget;
}
#define UM_APPBARID  WM_USER + 1
class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();
protected:

    bool nativeEvent(const QByteArray &eventType, void *message, long *result)override;

private:
    Ui::Widget *ui;
    APPBARDATA m_abd;
};

#endif // WIDGET_H

文件:wdget.cpp的代码

// widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>


Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    memset(&m_abd, 0, sizeof(APPBARDATA));
    m_abd.cbSize = sizeof(APPBARDATA);
    m_abd.hWnd = (HWND)this->winId();
    m_abd.uCallbackMessage = UM_APPBARID;
    ::SHAppBarMessage(ABM_NEW, &m_abd);

}

Widget::~Widget()
{
    delete ui;
}



bool Widget::nativeEvent(const QByteArray &eventType, void *message, long *result)
{

    MSG* msg = (MSG *)message;
    if(msg->message == UM_APPBARID)
    {
        switch ((UINT)msg->wParam)
        {
        case ABN_FULLSCREENAPP:
        {
            if (TRUE == (BOOL)msg->lParam)
            {
                qDebug()<<"进入全屏";
            }
            else
            {
                qDebug()<<"退出全屏";
            }
        }
            break;
        default:
            break;
        }
    }
  return false;
}


这里有一个细节,假如你多个显示器。比如你有显示器1,显示器2。这时候,如果你的检测程序在显示器1,而显示器2 有个软件进入全屏状态。那么显示器1的检测程序是不会收到全屏消息的。只有它们在同一个显示器,才会收到全屏消息。

参考:Full screen检测方法_jtujtujtu的博客-CSDN博客

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值