目前测试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.youkuaiyun.com/article/details/117553029
功能已经实现,对浏览器的隐藏显示