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

Windows下,已知程序PID,取得其窗口句柄HWND

我需要实现这么一个功能:在知道某个程序的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() << "the title text:" << title << result << hWnd << 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;
}

调用方式请看下面
listProcessIdentifier函数的实现请看前一篇【在Qt中获取Windows中进程的PID】

    // 选定要显示的进程的exe名字,获取其PIDQString processName = "";processName = "MyApp.exe";QList<quint64> pidList = listProcessIdentifier(processName);qDebug() << "the pid list:" << pidList;// 根据PID,取得其窗口句柄hWndHWND hWnd = findWindowByPID(pidList.first());qDebug() << "hwnd:" << hWnd;ShowWindow(hwnd, SW_MAXIMIZE); // 最大化显示窗口

参考:
【怎么从进程pid获得窗口句柄呢?】

http://www.lryc.cn/news/415593.html

相关文章:

  • Java获取exe文件详细信息:产品名称,产品版本等
  • ORB-SLAM2运行环境搭建
  • Nginx高频核心面试题2
  • 全面提升PDF编辑效率,2024年五大顶级PDF编辑器推荐!
  • 代码随想录算法训练营第二十天|235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点
  • 视频美颜SDK与直播美颜插件在实时视频中的应用
  • 【Linux】yum(工具篇)
  • 3GPP入门
  • FFmpeg内存对齐简述
  • 手机号码归属地查询接口如何对接?(一)
  • DDei在线设计器-加载数据
  • NetLLM: Adapting Large Language Models for Networking.
  • 基于Yolov8面部七种表情检测与识别C++模型部署
  • 未确认融资费用含义及会计处理流程
  • Linux配置go程序为service后台开机自启动
  • 汇舟问卷:完成16份调查,挣了40美金,换算后美滋滋
  • Nacos 202407月RCE漏洞(0day)与复现
  • Dynamo修改共享参数绑定的分组——群问题整理005
  • 聚焦汽车软件开发与测试:静态代码扫描、单元测试与集成测试等方面的实践应用
  • 「队列」实现FIFO队列(先进先出队列|queue)的功能 / 手撕数据结构(C++)
  • C++ STL中 `set` 和 `multiset` 简单对比
  • 代码随想录算法训练营Day20 | Leetcode 235 二叉搜索树的最近公共祖先 Leetcode 701 二叉搜索树中的插入操作
  • 第九届世界3D渲染大赛:赛程安排、赛事规则
  • RocketMQ5.0 Consumer Group
  • vulnhub之serial
  • 卷积神经网络(CNN)简单原理与简单代码实现
  • 实时数仓分层架构详解
  • 计算机“八股文”在实际工作中是助力、阻力还是空谈?
  • 新160个crackme - 022-CM_2
  • 在.c和.h 文件里定义数组的区别