获取chrome谷歌浏览器打开多网页后的窗口句柄,并操作该网页窗口(窗口大小,位置等)

问题描述:利用chrome谷歌浏览器打开多个网页(多个窗口显示),分别获取每个窗口的句柄,并能对各个窗口设置大小和位置

问题分析:重点:1.打开多个窗口 用 --new-window       

                            2.获取打开网页(一个网页一个窗口)的窗口句柄,浏览器并不像应用程序一样只有一个进程,打开一个chrome谷歌浏览器默认会有一个主进程和多个子进程,关键是要找到自己打开的那个网页的进程。所有我只能通过标签的名字来想办法了。因为这些子进程的类名都是“Chrome_WidgetWin_1”,根本无法分辨。

 

具体解决代码:

1.用进程QProcess打开chrome谷歌浏览器

QString appUrl ="C:/Users/IM/AppData/Local/Google/Chrome/Application/chrome.exe";
if(appUrl=="")
{
    return ;
}

QStringList arguments;

arguments <<" --new-window"<<"www.baidu.com";

QProcess* pProcess = new QProcess();

pProcess->start(appUrl,arguments);

pProcess->waitForFinished(1000);

 

2.获取刚才打开的百度网页的窗口句柄

 PROCESSENTRY32 pe32;
    pe32.dwSize = sizeof(pe32);
    HANDLE hp = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    BOOL find = Process32First(hp, &pe32);
    QList<HWND> hwndList;
    while (find)
    {
        find = Process32Next(hp, &pe32);
        QString str1 = QString::fromWCharArray(pe32.szExeFile);
        if(str1=="chrome.exe")
        {
            qDebug()<<str1<<pe32.th32ProcessID;
            DWORD jinchengid = pe32.th32ProcessID;
            hwndList = GetWindowHandleByPIDq(jinchengid);
            //qDebug()<<"窗口句柄 "<<chuangkoujubing;
            break;
        }
    }

 

 if(hwndList.size() == 1)
   {
       m_HWND_list.append(hwndList.at(0));
       QWindow *pWin = QWindow::fromWinId((WId)hwndList.at(0));//根据句柄获得该窗口
       pWin->setGeometry(x,y,iwidth,iheight);//对窗口设置位置和大小

       qDebug()<<"m_HWND_list "<<m_HWND_list;
   }

 

QList<HWND> DlgWnd::GetWindowHandleByPIDq(DWORD dwProcessID)//通过进程ID获取子窗口
{
    QList<HWND> HWND_list;
    HWND h = ::GetTopWindow(0);
    while (h)
    {
        DWORD pid = 0;
        DWORD dwTheardId = GetWindowThreadProcessId(h, &pid);

        if (dwTheardId != 0)
        {
            if(pid==dwProcessID)
            {
                 TCHAR *name=new TCHAR[MAX_PATH];
                 //::GetClassName(h, name, 255);
                 ::GetWindowTextW(h, name, 255);
                 QString title = QString :: fromStdWString(name);
                  qDebug()<<title;
              if(title.contains("- Google Chrome")&&title!="任务管理器 - Google Chrome")//自己打开的窗口都是以- Google Chrom结尾
                  {
                        //qDebug()<<"打开的窗口 "<<h;
                        HWND_list.append(h);  //HWND_list记录所有谷歌浏览器下打开的窗口

                        if(m_HWND_list.contains(h))//m_HWND_list存的是之前已经打开并记录下来的窗口  m_HWND_list需自己在头文件定义一下 QList<HWND> m_HWND_list;
                        {
                            HWND_list.removeOne(h);//只记录现在打开的窗口
                        }
                  }
                 //return h;
            }
        }
        h = ::GetNextWindow(h, GW_HWNDNEXT);
    }
    qDebug()<<"打开的新窗口 "<<HWND_list;
    return HWND_list;//返回的最新打开的窗口(就一个)
}

头文件必须加上:

#include <QWindow>
#include <windows.h>
#include <TlHelp32.h>

 

 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值