2011-12-22 36 views
3

GetMessage()のような標準Windows API関数を使用してJavaキャンバスからテキストをキャプチャすることは不可能なので、このようなJavaキャンバス内にdrawText()メソッドをフックしてその前にテキストをキャプチャする方法があるかどうか疑問に思った実際にキャンバスに描画されています。誰かがこれを解決するためのアイデアを持っていますか? Javaで書かれた解決策も受け入れられるでしょう。どんな提案もいいでしょう、ありがとう。SunAwtCanvasからプレーンテキストを取得

編集: 外国のキャンバスハンドルを盗んで自分のキャンバスに設定することはできますか?したがって、外国のアプリケーションはキャンバスにはなりませんが、私のスプーフィングされたアプリケーションには描画されません。このようにして私のアプリケーションで簡単にdrawText()メソッドをオーバーライドできます。

答えて

1

Java Instrumentationを使用して、JavassistなどでdrawString()にコードを挿入します。

あなたはpremain方法で変換を有効にするinsertBeforethereでコードを注入するhereからコードを組み合わせることができます。

+0

私はキャンバスをキャプチャしたいアプリケーションのソースコードを持っていません。 – arminb

+1

ソースコードは必要ありません。インストルメンテーションは、実行時にバイトコードを変更する方法です。 –

+0

これは例でどのように動作するかを実証できますか? –

0

Graphics2Dという独自のサブクラスを作成し、その上で図面​​を作成するのは簡単です。サブクラスはdrawString()をオーバーライドして、何でもできます。私はおそらく、コンストラクタの引数として指定された別のインスタンスにすべてのメソッド呼び出しを転送するラッパーとして実装を記述します。そのようにして、サブクラスを使用して画面に直接書き込むことができます。もちろん、サブクラスの新しいインスタンスを返すにはcreate()を実装してください。

+0

ありがとうございます。私は自分のものではなく、外国のアプリケーションからテキストをキャプチャしたいと考えましたか?いくつかのリンクやサンプルコードは非常に良いでしょう。私の編集した質問も見てください、ありがとう。 – arminb

関連する問題