2011-12-22 124 views
3

由于使用标准Windows API函数(如GetMessage())从java画布捕获文本是不可能的,因此我想知道是否有任何方法可以在此类java画布中钩住drawText()方法并捕获文本它实际上是在画布上绘制的。有没有人有一个想法如何解决这个问题?用java编写的解决方案也将被接受。任何建议都会很好,谢谢。从SunAwtCanvas获取纯文本

编辑: 是否有可能盗取国外帆布手柄并将其设置到我自己的画布上?因此,外国申请不会再画到画布上,而是画到我的欺骗画面上。通过这种方式,我可以在我的应用程序中轻松覆盖drawText()方法。

回答

1

使用Java Instrumentation将代码注入到drawString()中,例如使用Javassist。

您可以结合here中的代码注入代码insertBeforethere以激活premain方法中的转换。

+0

我没有从应用程序中捕获其画布的任何源代码。 – arminb 2011-12-31 00:06:23

+1

你不需要源代码。 Instrumentation是一种在运行时更改字节代码的方法。 – 2011-12-31 00:09:22

+0

你能证明这将如何与一个例子? – 2017-10-02 19:45:32

0

编写你自己的子类Graphics2D将会很容易,并且已经完成了绘图;你的子类可以覆盖drawString()做任何你想做的事情。我可能会把这个实现写成一个包装器,它将所有方法调用转发给指定为构造函数参数的另一个实例,这样子类可以用来直接写入屏幕。当然,一定要实现create()以返回您的子类的新实例。

+0

谢谢。您是否认为我想从外国申请中获取文本,而不是我自己的文本?有些链接或示例代码会非常好。看看我编辑的问题,谢谢。 – arminb 2011-12-22 14:37:37