pywin32:如何从进程句柄获取窗口句柄,反之亦然

2024-05-23

两个用例:

  1. 枚举窗口,然后获取每个窗口的进程句柄

  2. 枚举进程,然后获取每个进程的主应用程序窗口句柄


枚举窗口,然后获取每个窗口的进程句柄

您需要这些 API:

  • win32gui.EnumWindows() http://timgolden.me.uk/pywin32-docs/win32gui__EnumWindows_meth.html枚举所有顶级窗口(即没有子窗口,也称为控件)
  • win32process.GetWindowThreadProcessId() http://timgolden.me.uk/pywin32-docs/win32process__GetWindowThreadProcessId_meth.html从窗口句柄获取进程ID
  • win32api.OpenProcess() http://timgolden.me.uk/pywin32-docs/win32api__OpenProcess_meth.html从进程ID获取进程句柄

枚举进程然后获取主应用程序窗口句柄 对于每个过程

您需要这些 API:

  • win32process.EnumProcesses() http://timgolden.me.uk/pywin32-docs/win32process__EnumProcesses_meth.html枚举所有进程
  • win32api.GetWindowLong() http://timgolden.me.uk/pywin32-docs/win32api__GetWindowLong_meth.html有论点GWL_STYLE to get 窗户样式 https://learn.microsoft.com/en-us/windows/win32/winmsg/window-styles and GWL_EXSTYLE to get 扩展窗口样式 https://learn.microsoft.com/en-us/windows/win32/shell/taskbar#managing-taskbar-buttons
  • win32gui.GetParent() http://timgolden.me.uk/pywin32-docs/win32gui__GetParent_meth.html确定无主窗口

通过过滤结果EnumWindows() using GetWindowThreadProcessId()您可以获得属于给定进程的所有窗口。

确定主窗口可能会很棘手,因为没有单一的窗口样式可以将窗口指定为主窗口。毕竟,应用程序可能具有multiple 主窗口.

你能做的最好的事情就是使用与taskbar https://learn.microsoft.com/en-us/windows/win32/shell/taskbar用于确定应用程序窗口,因为这就是用户所感知的主窗口:

每当应用程序启动时,Shell 都会在任务栏上放置一个按钮 创建一个无主窗口——即一个没有 父级并且具有适当的扩展样式位。

确保窗口按钮是 放置在任务栏上,创建一个无主窗口 WS_EX_APPWINDOW 扩展样式。为了防止窗口按钮 放置在任务栏上,使用以下命令创建无主窗口 WS_EX_TOOLWINDOW 扩展样式。作为替代方案,您可以创建一个 隐藏窗口并使该隐藏窗口成为可见窗口的所有者 窗户。

Use GetParent() and GetWindowLong()根据这些规则确定具有正确窗口样式的无主窗口。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pywin32:如何从进程句柄获取窗口句柄,反之亦然 的相关文章

  • 如何等到我启动的程序使用完该文件后才删除该文件?

    我一直在寻找一种方法来打开通过 Delphi 应用程序及其适当的应用程序保存到我的计算机上的文件 该文件存储在 SQL 数据库中的 Varbinary 字段中 加载到内存流中 然后通过 TMemoryStream 的 SavetoFile
  • 如何拥有程序执行时间的控制台?

    我正在尝试编写一个在控制台或 GUI 模式下工作的程序 具体取决于执行参数 我已经成功编写了以下示例代码 using System using System Collections Generic using System Linq usi
  • 尝试使用 C++ 创建一个计划任务运行一次,win7 上的任务计划程序 1.0

    我正在尝试创建一个非常简单的程序 它将在两分钟后运行记事本 这些都经过简化以提出更清晰的问题 我尝试合并一些MSDN 的例子 http msdn microsoft com en us library windows desktop aa3
  • 如何使用 DirectWrite 平衡面向脚本的 OpenType 功能与其他 OpenType 功能?

    全面披露 我正在开发 libui GUI 框架的文本 API 它包装了 Windows 上的 DirectWrite OS X 上的 Core Text 以及其他 Unix 上的 Pango 使用 HarfBuzz 进行 OpenType
  • 如何使用 P/Invoke 在 PowerShell 1.0 中调用 Win32 函数?

    在许多情况下 从 PowerShell 脚本调用 Win32 函数或其他一些 DLL 会很有用 给定以下函数签名 bool MyFunction char buffer int bufferSize 我听说 PowerShell CTP 2
  • 确定矩形在窗口内是否可见

    我想确定窗口内的矩形是否完全可见 我找到了 RectVisible 但该函数确定矩形的任何部分是否可见 我想知道整个矩形是否可见 有没有这方面的功能 首先通过使用将系统剪切区域 窗口的可见区域 变成一个区域GetRandomRgn http
  • 如何使用本机 C++ 检查进程是否在 Windows 7 中具有提升的权限?

    如何检查进程在 Windows 7 中是否具有提升的权限 使用本机 C 而不是 C C net 我有时一直在寻找答案 但我只能找到使用 NET 框架的答案 最简单的方法是调用 IsUserAnAdmin 函数 如果您需要更高的精度 您也可以
  • 使用 FILE_FLAG_NO_BUFFERING 会带来明显的速度增益吗?

    最近在MSDN中注意到FILE FLAG NO BUFFERING标志的详细描述 并阅读了几条关于Windows中无缓冲I O的Google搜索结果 http msdn microsoft com en us library aa36385
  • 在 C++ 应用程序中显示/隐藏桌面图标

    右键单击桌面 取消选中 视图 gt 显示桌面图标 桌面上的所有图标都会消失 是否可以从 C 应用程序显示 隐藏桌面图标 你有c 代码的例子吗 预先非常感谢您的任何建议 SHGetSet设置 http msdn microsoft com e
  • Windows 内核中可能的最大文件名长度

    我想知道 什么是longestWindows 内核允许的可能名称长度 例如 我知道内核使用UNICODE STRING结构来保存所有对象路径 并且由于宽字符字符串的字节长度存储在USHORT 允许最大路径长度为 2 15 1 个字符 有没有
  • Win32 函数获取 C:\ProgramData 的路径

    我的应用程序需要安装一些可以由应用程序在运行时编辑的文件 Installshield提供了一个别名 CommonAppDataFolder 它将在Vista和Windows 7上解析为c programData 并且也适用于Windows
  • FAT-32 上的 Unicode 文件名?

    据我了解 NTFS 支持 Unicode 文件名 正如 Microsoft 声称的那样 UTF 16 但官方 MSDN 文档对于使用什么代码页在 FAT 32 上存储文件名 文件路径 非常模糊 这里说的是OEM 代码页 我假设是CP437
  • 使用createremotethread注入dll

    createremotethread如何在进程内执行dll 它使用的参数之一是 loadlibraryA 所以我得到了它在进程中执行 loadlibrary 函数的部分 然后它应该将上下文切换到内核模式 dll 是否由具有 loadlibr
  • 如何使用 COMMTIMEOUTS 等待字节可用但读取多个字节?

    我有一个 C 串行端口类 它具有用于读取操作的非阻塞和阻塞模式 对于阻塞模式 COMMTIMEOUTS cto GetCommTimeouts m hFile cto Set the new timeouts cto ReadInterva
  • 在 win32 API 应用程序中实现全球化/多语言功能

    我用 Visual C 开发了一个窗口应用程序 Win32 API 我必须在此应用程序中添加多语言功能 任何人都可以指导我如何完成这项任务 Windows 上多语言应用程序的基础是 资源 的使用 资源是附加在可执行文件末尾的块 它仅包含数据
  • HBRUSH 转 RGB 值

    你能得到RGB值吗HBRUSH或者从刷子ID 例如 我正在寻找GRAY BRUSH以 RGB 值表示 您想使用获取对象 http msdn microsoft com en us library windows desktop dd1449
  • 使用 xlwings 排序(pywin32)

    我需要使用 python 按给定行对 Excel 电子表格进行排序 为了进行测试 我使用以下数据 在名为 xlwings sorting xlsx 的文件中 Numbers Letters Letters 2 7 A L 6 B K 5 C
  • 32 位 OpenFileDialog --> 64 位 System32?

    在 32 位程序中 如何让打开 保存文件对话框显示 64 位系统的 System32 文件夹中的文件 Wow64DisableWow64FsRedirection不起作用 因为由于某种原因它不适用于对话框 我猜是因为它位于不同的线程上 当然
  • python - 使用 win32file.ReadFile 读取文件

    类似问题 使用 win32file ReadFile 从管道获取输出的正确方法是什么 https stackoverflow com questions 2069344 whats the correct way to use win32f
  • WinApi:获取 COM 表单的控件名称

    我想用 Net 框架替换我当前的 UI 自动化工具 QTP 我需要测试 VB6 COM 应用程序 框架的基础之一是使用表单名称 到目前为止 我未能找到使用 Win API 获取这些数据的方法 该解决方案只有一个约束 即该解决方案必须依赖 N

随机推荐

  • context.xml 的 glassfish 替代品是什么

    我习惯于配置网络应用程序context xml 包括jdbc资源和应用程序配置参数 在 glassfish 下 什么被认为是存储应用程序配置信息的标准位置 我们曾经将它存储在context xml文件如下
  • sizeToFit 运行异常

    我有一段代码 每次发生后端数据库更改时都会执行 本质上我在父视图中有一个标签 标签由许多状态消息之一更新 每个状态消息位于不同的行上 并以换行符 n 结尾 每条状态消息只能在一行上 并且不能过多 我遇到的问题是 当视图首次重新加载时 一切正
  • Visual Studio 2010 支持 iPhone 开发吗? [复制]

    这个问题在这里已经有答案了 可能的重复 如何使用 Windows 开发机为 iPhone 进行开发 https stackoverflow com questions 22358 how can i develop for iphone u
  • 闪亮的传单添加大量分离的折线

    我有一个 200k 行数据集 其中包含出发地和目的地的坐标 我有一个 R 闪亮的应用程序 带有传单地图 可以在这些坐标上显示圆圈 尽管坐标数量很大 但效果很好 这是数据的简化示例 每行包含出行id 出发地经纬度 目的地经纬度 id lat
  • android设计库gradle空指针异常

    我正在尝试添加android support design我的项目的库 我的 gradle 文件中所有有趣的事情 dependencies compile fileTree include jar dir libs compile com
  • Tomcat从Eclipse和startup.sh启动

    奇怪的事情发生了 我可以从 Eclipse 和startup sh 启动Tomcat 从 Eclipse 运行我可以访问 localhost 8080 而从startup sh 运行时我不能 可能是什么问题呢 Ubuntu 11 10 在
  • iOS 中系统日期更改后如何更改带有日期的标签?

    我有一个简单的查询 但不知道该怎么做 这就是我想要实现的目标 1 我有一个带有今天日期的 UILabel 即 29 04 12 2 在午夜 我希望该标签自行更新为 30 04 12 而无需更改视图或按任何内容 这是第2步 我不知道该怎么做
  • 如何使用 private_key.pepk 签署 Android 应用程序

    我在 Google Play 中有一个应用程序 现在我需要发布该应用程序的新版本 2 如何使用 private key pepk 签署 Android 应用程序 我丢失了 Java 密钥库 jks 或 keystore 我只有 privat
  • CodeMirror:如何限制编辑器中的高度

    I am using codemirror http codemirror net to show some code on a webpage But when I initialize the codemirror editor the
  • 在Java中赋值?

    假设我设置了 int A int B 当我更改 A 之后 它不会更改 B 的值 但是当我设置 SomeClass A SomeClass B 并且更改 A 的内容 如 a cost 时 它会更改 B 成本也是如此 谁可以给我解释一下这个 我
  • 将跟踪消息获取到来自控制器的失败请求跟踪中

    在 ASP NET MVC Preview 5 上 我们无法从全局或控制器获取任何跟踪消息以显示在页面 视图 或失败请求跟踪 FREB 中 这些调用都不能在控制器操作中工作 HttpContext Trace Write hello Sys
  • 如果 RCurl::getURL() 执行时间太长,如何停止执行?

    有没有办法告诉 R 或 RCurl 包在超过指定时间段时放弃尝试下载网页并转到下一行代码 例如 gt library RCurl gt u http photos prnewswire com prnh 20110713 NY34814 b
  • 用于匹配某些数字的正则表达式

    以下正则表达式将匹配 9 11 位数字 d 9 11 编写完全匹配 9 的正则表达式的最佳方法是什么or11位数字 不包括10位 使用输入元素的模式属性 因此正则表达式应该匹配输入字段的整个值 我想接受任何包含 9 或 11 位数字的号码
  • 使用 Typescript 检查接口类型

    这个问题是直接类比使用 TypeScript 检查类类型 https stackoverflow com questions 12789231 class type check with typescript 我需要在运行时查明任何类型的变
  • Python 3:将元组转换为字符串

    我有以下代码 var one var two var three 1 var one string one var 1 我需要对其执行以下操作 var four string two var one 但是 这会返回以下错误 TypeErro
  • Z3:FP 和 BitVector 之间的转换?

    SMTLIB2 中是否有任何方法可以在 BitVector 和 FP 之间进行转换 例如 int2bv 和 bv2int 函数 为了澄清 我正在寻找位的原始表示 而不是例如 BitVec 形式的舍入整数 准确地说 SMTLIB中的浮点运算还
  • 如何使用 cucumber runner 类运行多个功能文件?

    使用下面的代码行 可以执行login feature中提到的所有场景 CucumberOptions features src main resources publish login feature format pretty 如果我必须
  • 使用 boost::lexical_cast 将 UUID 转换为字符串时出现 Boost 编译错误

    我有这个代码 它基于 SO 中的几篇文章 boost uuids uuid uuid boost uuids random generator auto uuidString boost lexical cast
  • Excel 公式转 SUMIF 日期属于特定月份

    我有以下格式的 Excel 数据 Date Amount 03 Jan 13 430 00 25 Jan 13 96 00 10 Jan 13 440 00 28 Feb 13 72 10 28 Feb 13 72 30 仅当月份位于时 我
  • pywin32:如何从进程句柄获取窗口句柄,反之亦然

    两个用例 枚举窗口 然后获取每个窗口的进程句柄 枚举进程 然后获取每个进程的主应用程序窗口句柄 枚举窗口 然后获取每个窗口的进程句柄 您需要这些 API win32gui EnumWindows http timgolden me uk p