windows - 从 Windows 窗体读取文本

标签 windows debugging winapi hook

如果不是出于学术练习的其他原因,我希望能够阅读写入 Windows 应用程序表单的文本。该程序似乎是用非 .NET 编写的,但在 .NET 术语中,我认为您会将程序描述为具有带有标签的表单,我想从该标签中读取文本。

我相信我可以看到使用 User32!TextOut(以及其他区域的 User32!DrawString)函数将文本写入屏幕。但是,如果我不必 Hook 该函数来获取我正在寻找的信息,而是直接从表单中读取它,那就太好了。

那么,给定一个窗口的句柄,是否可以使用一些类似的 API 或其他巧妙的方法,使用 TextOut 和 DrawString 等函数读取写入该窗口的文本?

还是我的做法不对?我是否应该只 hook 函数并在每次调用时查找文本并祈祷?

谢谢!

最佳答案

如果文本以标准方式存储在控件上,您可以使用 SendMessage

Win32.SendMessage(controlHandle, Win32.WM_GETTEXTLENGTH, 0, null);

如果在编写控件时考虑到了安全性,则几乎可以肯定文本不会以可通过 Windows API 查询的格式存储。

我曾经使用一个名为 Snadboy Revelation 的程序从程序中获取忘记的密码(刚刚显示为 *****)。启示录使用了同样的技巧。然而,大多数现代软件都隐藏了密码和类似字段的文本,因此如今这已经没有那么大的用处了。

更新:

找到 source code对于 Windows Spy 应用程序。

关于windows - 从 Windows 窗体读取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2703343/

相关文章:

c - 使用主入口点将 HINSTANCE 传递给 WNDCLASS

c++ - Gdiplus::Image::GetWidth() 和一堆其他 setter/getter 不应该是 "const"吗?

windows - 使用 OpenNI2 和 NiViewer 初始化 StructureSensor 时出错

windows - 代码签名 Windows 驱动程序

Windows 无法为新数据库实例启动 DBConsole

c++ - 有没有办法在不使用 COM 的情况下获取域中某些用户的电子邮件?

java - 如何检查代码中变量的更新/更改位置(java - eclipse)?

java - 在 Windows 10 上使用 Intellij IDEA 在 WSL 2 中运行和调试 Java

Internet Explorer 中的 JavaScript 故障排除工具

winapi - 是否可以捕获包含 Windows 7 DWM 缩略图的窗口?