spy++是可以获取浏览器当前页面的标题的,并且可以根据“窗口标题”和“类名”实现对浏览器的显示和隐藏,

目前测试Firefox和Chrome都是可以的
以下是例子

头文件mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QProcess>
#include <QWindow>
#include <QDebug>
#include <QStringList>
#include <Windows.h>
#include <windows.h>
#include <WinUser.h>
#include <QLibrary>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    QProcess process;
    QString addrname;
    QString proname;
    QStringList argu;
    QString sortname;
    QString windname;
    bool whetherrun();
    void killprog();
    void programrun();
    void windshow();
    void windhide();
    bool frun;
    QLibrary *libdll;

private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

    void on_pushButton_3_clicked();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

cpp文件,MainWindow

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QLibrary>
#include <QMessageBox>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
//     QProcess *p = new QProcess();

//    addrname ="D:\\hello\\quicknanobrowser\\debug\\quicknanobrowser.exe";
//    proname ="quicknanobrowser.exe";
//    argu << "http://www.baidu.com";
//    sortname = "Qt5QWindowOwnDCIcon";
//    windname = "quicknanobrowser";
//    addrname ="D:\\hello\\build-qwer-Desktop_Qt_5_9_6_MinGW_32bit-Debug\\debug\\qwer.exe";
//    proname ="qwer.exe";
//    argu << "http://www.baidu.com";
//    sortname = "Qt5QWindowIcon";
//    windname = "MainWindow";

//    libdll = new QLibrary("NDde.dll");   //声明所用到的dll文件
//     if (libdll->load())              //判断是否正确加载
//     {
//         QMessageBox::information(NULL,"OK","DLL load is OK!");

//     }

//     addrname ="C:\\Program Files\\Mozilla Firefox\\firefox.exe";
//     proname ="firefox.exe";
//     argu << "http://www.baidu.com";
//     sortname = "MozillaWindowClass";
//     windname = "百度一下,你就知道 — Mozilla Firefox";

     addrname ="C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe";
     proname ="chrome.exe";
     argu << "http://www.baidu.com";
     sortname = "Chrome_WidgetWin_1";//这是在spy++里面看到的类名
     windname = "百度一下,你就知道 - Google Chrome";//窗口标题





//     DdeClient dde = new DdeClient("Firefox", "WWW_GetWindowInfo");
//     dde.Connect();
//     QString url = dde.Request("URL", int.MaxValue);
//     dde.Disconnect();
//     MessageBox.Show(url);
}

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

void MainWindow::on_pushButton_clicked()
{
//    p->start(addrname,argu);
//    qDebug()<<"创建cs"<<proname;
    programrun();
}


void MainWindow::on_pushButton_2_clicked()
{
//    QProcess proc;
//    QString strs = "tasklist";
//    proc.start(strs);
//    proc.waitForFinished();
//    QString st = proc.readAllStandardOutput();
//    if(st.contains(proname))
//    {
//        p->close();
//        qDebug()<<"关闭";
//    }
//    else
//    {
//        if(p->state() ==2)
//        {
//            p->close();
//            qDebug()<<"all";
//        }
//    }
    windhide();

}

bool MainWindow::whetherrun()
{
    QProcess proc;
    QString strs = "tasklist";
    proc.start(strs);
    proc.waitForFinished();
    QString st = proc.readAllStandardOutput();
    if(st.contains(proname))
    {
        frun = true;
        return true;
    }
    else
    {
        if(process.state() ==2)
        {
            process.close();
        }
        return false;
    }
}
void MainWindow::killprog()
{
    QProcess pkill;
    QString commd = "taskkill /f /im "+proname;
    if(frun)
    {
        pkill.execute(commd);
        pkill.close();
        qDebug()<<"sha si";
    }
}
void MainWindow::programrun()
{

    if(whetherrun() && (process.state()==2))
    {
        qDebug()<<proname<<"已经运行";
        windshow();//打开的窗口再次在上面
    }
    else
    {
        //trr->start();//定时器开始工作

        process.start(addrname,argu);
        qDebug()<<"创建ca"<<proname;
    }
}
void MainWindow::windshow()
{
    WId wid;
    if(windname == "")
    {
        wid = (WId)FindWindow((LPCWSTR)sortname.toStdWString().c_str(),nullptr);
    }
    else
        wid = (WId)FindWindow((LPCWSTR)sortname.toStdWString().c_str(),(LPCWSTR)windname.toStdWString().c_str());
    QWindow *qwind = QWindow::fromWinId(wid);
    qDebug()<<"creation windshow pos:"<<qwind->position().y();
    if(qwind== NULL)
        return;
    ShowWindow((HWND)qwind->winId(),SW_MAXIMIZE);
    SetWindowPos((HWND)qwind->winId(),HWND_TOP,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);//让已经打开的界面再显示

    //bool rty = SetWindowPos((HWND)qwind->winId(),HWND_TOP,0,theheight,taskwidth,subheight,SWP_FRAMECHANGED);
    //qDebug()<<rty;
    delete qwind;
}

void MainWindow::windhide()
{
    WId wid;
    if(windname == "")
    {
        wid = (WId)FindWindow((LPCWSTR)sortname.toStdWString().c_str(),nullptr);
    }
    else
        wid = (WId)FindWindow((LPCWSTR)sortname.toStdWString().c_str(),(LPCWSTR)windname.toStdWString().c_str());
    QWindow *qwind = QWindow::fromWinId(wid);
    if(qwind== NULL)
        return;
    ShowWindow((HWND)qwind->winId(),SW_HIDE);

    delete qwind;
}

void MainWindow::on_pushButton_3_clicked()
{
    windshow();
}


还有一个问题是如何实时获取****浏览器当前打开的页面的标题,这个问题解决了就可以更好的控制浏览器页面隐藏和显示了。
这个问题解决了,参考https://xiuye.blog.csdn.net/article/details/117553029
功能已经实现,对浏览器的隐藏显示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值