【问题标题】:Read Text From Windows Form从 Windows 窗体读取文本
【发布时间】:2010-04-24 05:28:23
【问题描述】:

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

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

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

或者我是不是走错了路?我应该只挂钩函数并在每次调用中查找文本并祈祷吗?

谢谢!

【问题讨论】:

    标签: windows debugging winapi hook


    【解决方案1】:

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

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

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

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

    更新:

    为 Windows Spy 应用找到 source code

    【讨论】:

    • 这听起来很棒!我会试一试! :) 只是为了确定:我可以通过在 controlHandle 上使用 DuplicateHandle 或类似名称从另一个应用程序执行此操作,对吧?
    • @omghai2u:您可以使用另一个进程的窗口句柄来执行此操作。为将具有实现的 Windows Spy 应用添加了指向源代码的链接。
    猜你喜欢
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    相关资源
    最近更新 更多