从SunAwtCanvas获取纯文本

3
由于使用标准的Windows API函数(如 GetMessage())无法从Java画布中捕获文本,我想知道是否有办法钩住此类Java画布内的drawText()方法,在其实际绘制到画布上之前捕获文本。请问有什么解决方法吗?建议使用Java编写的解决方案也可以接受。任何建议都会很好,谢谢。
编辑: 是否可能窃取外部画布句柄并将其设置为我的画布?因此,外部应用程序不再向其画布绘图,而是绘制到我的欺骗画布上。通过这种方式,我可以轻松地在我的应用程序中覆盖drawText()方法。
2个回答

1
使用Java Instrumentation将代码注入到drawString()中,例如使用Javassist。
您可以结合此处的代码使用insertBefore注入您的代码,以及那里premain方法中激活转换。

我没有任何来自我想捕获其画布的应用程序的源代码。 - arminb
1
你不需要源代码。插装是一种在运行时更改字节码的方法。 - Wolfgang Kuehn
你能举一个例子来演示一下这是如何工作的吗? - Stevoisiak

0
很容易编写自己的Graphics2D子类,并在其上完成绘图;您的子类可以覆盖drawString()以执行任何您想要的操作。我可能会将实现编写为包装器,该包装器将所有方法调用转发到另一个作为构造函数参数指定的实例,因此您的子类可以直接用于屏幕写入。当然,请务必实现create()以返回您的子类的新实例。

谢谢。你有没有考虑过我想从一个外部应用程序中捕获文本,而不是我的自己的应用程序?如果能提供一些链接或示例代码就太好了。也请看一下我编辑后的问题,谢谢。 - arminb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接