Javaアプリ内のChild取得 or Editテキスト取得


say  2009-02-16 18:48:09  No: 33379

こんにちは。
D6Proで開発してます。

Winsightにて、Javaアプリ内を見るとParentの表示はされるのですが
その中のChildは取得できないようです。これを取得する方法はありますか?

また、Java内のEditの文字をGetする位はできますでしょうか?

宜しくお願いします。


monaa  2009-02-18 03:40:18  No: 33380

レスがつかないようなので、よくわかりませんが。
適当なJavaアプリケーションがないので確認できないのですが、
Java製アプリのGUIコントロールのEditは例えばspy++のようなツールで
コントロールの識別は可能なのでしょうか?
つまり純粋なコモンコントロールなのでしょうか?
だとすれば、通常の方法で取得可能です、違うなら特殊な捜査が必要になります。


say  2009-02-18 08:21:10  No: 33381

レスありがとうございます。

winsightで確認済みですがParentは取れますがChildのhandleはゲットできません。

特殊な捜査とありますが具体的にどのような方法がありますか?
よろしくお願いします。


monaa  2009-02-18 08:46:15  No: 33382

ターゲットとなる相手の仕様が分からないので一般的な捜査の反対語として特殊な捜査を使ったわけで、具体例が出せないという意味です。

汎用性を完全排除してよければ、
ターゲットアプリケーションのメモリーを展開して、目的の場所を書き換えてしまえばOKです。これだと別にJAVAである必要はなく、Windowsで動作するアプリケーションであれば何でもいけます。
SINZANさんがWindows上のプロセスのメモリを手軽に操作可能なdllを公開しています。(Delphiからも使えます)
http://f16.aaa.livedoor.jp/~sinzan/index.html
メモリーの検索やらはこの辺が有名です。
http://hp.vector.co.jp/authors/VA028184/
ですがこの手の作業は対象とするソフトウェアによっては禁止事項に相当する場合があります。特に製品では許可している事のほうが稀です。


にー  2009-02-18 09:50:40  No: 33383

もしVM(VirtualMachine)上で動いているアプリの事であれば
それなりのインターフェイスをアプリ側で
持っていなければ普通は無理なのでは?

親を指定してEnumChildWindowsAPIなりで列挙できる
ウィンドウハンドルですか?


say  2009-02-18 16:59:43  No: 33384

>>monaa
レスありがとうございます。
とってもディープですね。
よろしければ、この部分の個人指導か、お仕事としてお願いしたいのですが
可能でしょうか?
メールアドレス欄に記入致しましたので、ご連絡頂けると幸いです。
よろしくお願いします。


にしの  2009-02-19 19:22:24  No: 33385

にーさんが言うように、JavaVM経由でないと取得できません。
AWTやSwingでなく、SWTであれば、中身はWindowsAPIのラッパなので取得できると思います。


say  2009-02-20 11:54:29  No: 33386

>>にーsan
>>にしのsan
レスありがとうございます。
EnumChildWindowsApiでは、Childは取得できません。

JavaVM経由でないと…
とありますが、DelphiからJavaを経由させることは可能なのでしょうか?
AWTやSwing,SWTなど、全く聞いたことがありませんでした。
少し調べてみます。

とにかくDelphiでやりたいです。好きなんで…
よろしくお願いします。


にしの  2009-02-25 21:40:21  No: 33387

AWTはJava1.0β2からある、java.awt.*ですよ。
Swingは、Java1.2のころにでてきた(うろ覚えですが)javax.swing.*です。
SWTは、eclipseで利用されていて、JDK標準ではないです。

DelphiからJavaVMを操作する方法は、JNIを調べてみてください。
http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/jni/spec/jniTOC.html

基本的に、JNI_CreateJavaVMでJavaVMのプロセスを起動してやればできるかと思いますが、Delphiでの情報は少ないと思います。

Java側に手を入れられるなら、JNIでDelphi側アプリを起動して、値を戻すほうが簡単かも。
Java側のJNIであれば、単純なDLLでしかないので。


say  2009-02-26 23:04:47  No: 33388

回答ありがとうございます。
早速リンク先を見させていただきました。
ですが、私には敷居が高そうです。
にしのさんは、多分、私が昔から知っているにしのさんだと思うのですが
(delphiの掲示板内の書き込みを見てです。)
詳細のお話しや、お仕事として依頼を掛けることは可能でしょうか?
よろしければ mailで連絡をいただきたいです。

よろしくお願いします。


monaa  2009-02-26 23:30:17  No: 33389

私の方法ですが、デメリットがあります。
メモリの扱いはOS,JavaVMのバージョンの影響を受けるため、
どの環境でも常に同じ仮想メモリアドレスになるとは限りません。
そのため、私の環境で実現可能でも、別の環境になるとアドレスがずれてしまうということはよくあります。
そのため、直接メモリを参照する場合は、
自分の環境だけでのみ動作すればよいという場合になります。

あと、別案ですが、Javaアプリケーションはリバースエンジニアリングが非常に容易にできます。(もちろんそれに対抗するツールもありますが)
Javaがある程度読み書きできるのであれば一度挑戦してみるのも手だと思いますが、これもライセンスに引っかかる可能性大です。
私は時間の都合もないし(社会人です)、確実にこなせる自信もないので、
仕事として引き受けることはできません。


say  2009-02-28 10:36:04  No: 33390

>>monaaさん
回答ありがとうございます。
依頼の件、承知しました。
お手数かけて申し訳ありません。

また、機会があれば、よろしくお願いします。


にしの  2009-03-03 21:26:27  No: 33391

> にしのさんは、多分、私が昔から知っているにしのさんだと思うのですが
> (delphiの掲示板内の書き込みを見てです。)
> 詳細のお話しや、お仕事として依頼を掛けることは可能でしょうか?
> よろしければ mailで連絡をいただきたいです。
この掲示板はかなり前から利用させて貰っているので、たぶんその「にしの」です。
ただ、仕事としては今は無理です。
長期の常駐案件を受けているので。
# それに、私の単価高いですよ?^^;

すぐには対応できませんが、今回の件のようなJava+Delphiはおもしろそうではあるので、時間があればTipsとして公開できればなぁと思います。


にしの  2009-03-03 22:11:49  No: 33392

ちょっと調べてみました。

http://www.pacifier.com/~mmead/jni/delphi/index.html
ここにJNI.hのDelphi版と、使用例が出ていました。
かなり細かく書かれています。
ただし英語ですが。

自分の試したところでは、JDKをC:\にインストールしている状態で、
C:\JDK\jre\bin\client
にPATHを通して実行するとうまくいきました。
インストール場所が違う場合は、jvm.dllがあるフォルダにパスを通してください。
# JDK1.1の場合はjavai.dllになります


say  2009-03-04 16:15:42  No: 33393

回答ありがとうございます。

お仕事の件、了解しました。
にしのさんクラスだと、やはり単価がはっちゃいそうですね。

>>JNI.hのDelphi版
早速、調べてみます。
ただし英語も苦手ですがw

また、分からない点などあったなら、質問させていただきます。
宜しくお願いします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加