当前位置: 首页 > news >正文

wordpress菜单代码windows优化大师会员

wordpress菜单代码,windows优化大师会员,网页设计公司背景图,集团网站建设 中企动力一、简述 今天给大家讲解的是使用QWindow类通过窗口句柄将外部的应用程序嵌入到我们的部件中来显示。在讲解之前可以延伸一下,当时项目中使用QProcess启动一些本地软件或者执行脚本时,需要将启动的第三方窗口嵌入到我们自己写的窗口中,此时我…

一、简述

今天给大家讲解的是使用QWindow类通过窗口句柄将外部的应用程序嵌入到我们的部件中来显示。在讲解之前可以延伸一下,当时项目中使用QProcess启动一些本地软件或者执行脚本时,需要将启动的第三方窗口嵌入到我们自己写的窗口中,此时我们通过QProcess类的start方法执行相应的启动命令,并获取到启动程序的进程id(pid),然后通过pid获取到窗口对应的句柄,最后通过QWindow类创建容器将外部应用程序嵌入到我们的界面中来。

所以讲解之前,会先讲解下如何通过WinApi根据进程id(pid)获取到窗口的句柄,然后再通过窗口句柄使用QWindow来嵌入到我们的界面中来。

二、代码之路

我们先使用WinApi通过进程id(pid)获取到窗口句柄,具体接口以及示例代码如下,大家可直接拷贝即可:


struct FindWindowData
{DWORD processId;HWND hWnd;
};BOOL FindWindowCB(HWND hWnd, LPARAM lParam)
{DWORD processId = 0;if (GetWindowThreadProcessId(hWnd, &processId)) {// 分配足够大的缓冲区来存储窗口标题const int MAX_TITLE_LENGTH = 255;WCHAR windowTitle[MAX_TITLE_LENGTH];// 调用 GetWindowTextW 来获取窗口标题int result = GetWindowTextW(hWnd, windowTitle, MAX_TITLE_LENGTH);// qDebug() << "the text:" << QString::fromWCharArray(windowTitle) << result << hWnd << processId;QString title = QString::fromWCharArray(windowTitle);FindWindowData* dataPtr = (FindWindowData*)lParam;// 这里的筛选条件可能需要继续优化if (processId == dataPtr->processId && IsWindowVisible(hWnd) && title.length() > 0) {qDebug() << QString("FindWindow  title:%1, hWnd:%2, pid:%3").arg(title).arg((WId)hWnd).arg(processId);dataPtr->hWnd = hWnd;}return TRUE;}return FALSE;
}// 寻找特定PID的窗口句柄
HWND findWindowByPID(DWORD dwProcessId)
{FindWindowData winData = { dwProcessId, 0 };LPARAM p = (LPARAM)&winData;EnumWindows((WNDENUMPROC)FindWindowCB, (LPARAM)p); // 遍历系统上打开的窗口return winData.hWnd;
}HWND getWinIdByPid(int pid)
{return findWindowByPID(pid);
}// 测试示例
void testFunc()
{// 创建进程QProcess* process = new QProcess(this);connect(process, QOverload<int>::of(&QProcess::finished), this, [=]() {process->close();process->deleteLater();});QString command = "xxx.exe";process->start(command);// 这里等待500毫秒是执行完命令等待窗口显示出来,具体时间得看程序启动的快慢;QThread::msleep(500);// 获取到pid之后通过接口转为窗口句柄;int pid = process->processId();HWND hWnd = getWinIdByPid(pid);
}

参考自 https://blog.csdn.net/joyopirate/article/details/140928311。


下方代码将获取到的窗口具体通过QWindow::fromWinId方法将窗口句柄转为QWindow对象,通过QWidget::createWindowContainer方法创建一个QWidget,可以将刚刚的窗口对象嵌入到基于QWidget的应用程序中,可以在测试方法中看到具体用法,拿到最终QWidget对象大家就可以嵌入到我们界面的布局中去了。

QWidget* getWindowContainerWgt(int pid)
{QWidget* pContainerWgt = nullptr;HWND hWnd = getWinIdByPid(pid);if (hWnd != nullptr) {pContainerWgt = new QWidget;// 这里也可以设置具体的大小;pContainerWgt->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);QWindow* pDestWindow = QWindow::fromWinId((WId)hWnd);pDestWindow->setFlags(pDestWindow->flags() | Qt::CustomizeWindowHint | Qt::WindowTitleHint);QWidget* pChildWidget = QWidget::createWindowContainer(pDestWindow, pContainerWgt);pChildWidget->setObjectName("WindowContainer");QHBoxLayout* hLayout = new QHBoxLayout(pContainerWgt);hLayout->addWidget(pChildWidget);hLayout->setMargin(0);}else {qDebug() << "Can not find winId by pid";}return pContainerWgt;
}void testFunc()
{// 创建进程QProcess* process = new QProcess(this);connect(process, QOverload<int>::of(&QProcess::finished), this, [=]() {process->close();process->deleteLater();});QString command = "xxx.exe";process->start(command);// 这里等待500毫秒是执行完命令等待窗口显示出来,具体时间得看程序启动的快慢;QThread::msleep(500);// 获取到pid之后通过接口转为窗口句柄;int pid = process->processId();QWidget* windowWgt = getWindowContainerWgt(pid)// 如果获取到的widget不为空,说明已经成功将窗口嵌入到widget中if(windowWgt != nullptr){// todo// ...}
}
http://www.hrbkazy.com/news/54444.html

相关文章:

  • 网站建设在哪个软件下做重庆seo推广
  • 鄂州网站制作哪家好济南seo排名搜索
  • 自制图片加字免费软件站长工具的使用seo综合查询运营
  • 辽宁建设厅网站首页重庆网站seo推广公司
  • 网站建设印花税广州网站优化外包
  • 网站备案 注意搜索引擎调词平台哪个好
  • 客户做百度推广后修改网站url需要哪些流程指数基金定投怎么买
  • 上海做网站公司品划网络宁波seo深度优化平台有哪些
  • 网站关键词怎么做效果好培训计划模板
  • 婚庆网站模板网站如何注册
  • 个人网页上传网站怎么做互联网销售平台
  • 找人做网站一套多少钱新产品怎样推广
  • 品牌网站建设策划书360站长平台链接提交
  • 广东企业网站seo哪家好网站推广的营销策划方案
  • 海西小程序开发公司天津seo网站管理
  • 日本做ps4游戏视频网站百度站长平台登录
  • 金华做网站报价杭州百度
  • 企业网站seo成功案例推广方案范例
  • 淮北疫情最新消息许昌网站seo
  • 网站布局介绍百度搜索引擎的特点
  • 重庆网站建设公司推荐河南seo优化
  • 长沙本土网站建设公司最近发生的热点新闻
  • tornado做网站seo外包优化服务商
  • 国外设计作品网站域名批量注册查询
  • 做网站不能有中文字符网络销售面试问题有哪些
  • 免费网站模板下载网站百度小说搜索排行榜
  • 陕西省交通建设集团公司招聘网站百度搜索排名
  • 商洛网站建设个人博客搭建
  • 哪个公司做视频网站每天4元代发广告
  • 深圳哪个网站好推广一点男生技能培训班有哪些