python - 如何以编程方式检索 Microsoft 的 Inspect.exe 中 "name"字段的等效项?

标签 python windows winapi ctypes pywin32

我想以编程方式从系统托盘中的工具提示中检索信息。

This shows the tooltip I'm talking about

该图像显示了工具提示。

现在,我发现通过使用 Microsoft 的 Inspect.exe,它是“一种基于 Windows 的工具,使您能够选择任何 UI 元素并查看该元素的辅助功能数据”,理论上是这样的可以通过编程方式检索该值。

将鼠标悬停在工具栏中的潘多拉图标上会显示以下属性

Properties of the pandora icon control as shown by inspect.exe

它显示一个属性“名称”,其中包含我需要的确切数据。我不确定如何使用 win32api 以编程方式检索该值。我已经有了潘多拉图标的 hwnd。

此外,另一个 ui spy 工具 UiSpy.exe 将此同一属性称为“helpText”(不同的歌曲名称:p)

enter image description here

我尝试使用 getWindowText(pandoraSystrayIconHwnd) 但返回不同的文本。有谁知道这个“名称”值是什么,以及如何使用 win32api 检索它?这应该是可能的,因为inspect.exe是一个外部程序,可以以某种方式访问​​数据

我在 Python 中执行此操作,因为目标应用程序已经用 Python 编写。

最佳答案

这些 spy 应用程序可能正在使用 Active Accessibility和/或 UI Automation .

您可以尝试调用AccessibleObjectFromWindow工具栏上的 HWND 或 AccessibleObjectFromPoint如果您关心鼠标位置,请调用 IAccessible::get_accName .

请记住,托盘图标工具栏的类名和窗口层次结构没有记录。

如果您只关心 Pandora 而不是其他应用程序,那么我强烈建议您查找 other alternatives第一的。也许他们有一个带有标题等的隐藏窗口。

如果你不介意黑客攻击,那么你可以看看 TraySaver ,它是开源的,并且知道为托盘工具栏中每个图标存储的数据的内部格式。请记住,它相当旧,可能无法在较新版本的 Windows 上运行。如果您走这条路(我不推荐它),那么您必须记住您需要同时支持 32 位和 64 位资源管理器。

关于python - 如何以编程方式检索 Microsoft 的 Inspect.exe 中 "name"字段的等效项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42031717/

相关文章:

python - 从 python 将多个字符串写入 csv

python - 如何将代表天数的单个整数转换为 pandas datetime

c - 在 C 中读取 Unicode 文件并通过套接字将内容作为 ASCII 传递

python - 为 python 安装 mysqldb

c# - 检查加载程序集的窗口是否打开

c++ - 如何知道现有的内部服务名称( lpServiceName )以停止它

python - 调整 mayavi 窗口大小

python - Django 用户配置文件中的自定义列

c - Visual Studio 2013 : Access violation when attempt to change value of variable obtained from LockResource()

c++ - 如何将 SendMessage() 发送到在另一个线程上创建的窗口?