2011-12-22 96 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