- PR -

外部からのSwingコンポーネント操作

1
投稿者投稿内容
kazaaa
会議室デビュー日: 2005/09/11
投稿数: 5
投稿日時: 2006-05-26 23:25
Swingアプリケーションに対して外部プログラムから
ボタン押下させることは可能でしょうか?
フォーカスオンの状態にてSendKey(スペース)にて処理可能で
あることは分かったのですが、押下タイミングが難しいため
直接ボタン押下のメッセージを投げられればと考えています。

実現方法ご存知な方、ご教授願います。
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2006-05-29 13:07
kazaaaさん、こんにちは。

ボタンを押させてプロセス間通信というのは
あまりスマートな感じがしません。

「環境に依存してもいいから!」という条件
付きというなら、私は Xプロトコルのパケット
を送信します。
kazaaa
会議室デビュー日: 2005/09/11
投稿数: 5
投稿日時: 2006-05-29 16:28
ご回答ありがとうございます。

外部プロセスからのアクセスですのでNative依存は
すでに許容済みです。
現在Windows上を想定しているのでWin32APIを直接叩けば
いけると思っていたのですですが、SwingのGUI管理が
特殊(Winアプリとは管理体系が違う)なため
そもそも、上記機能は実現できるのか?と思って質問させて
頂きました。

WindowsのSwingに対しするWindowメッセージの一覧とか
があればもう少しわかりやすいのですが。。。
まだ、Swingのソースを読んでいないので、まずそちらから
調査してみます。
びしばし
大ベテラン
会議室デビュー日: 2002/03/13
投稿数: 181
投稿日時: 2006-05-29 17:30
めちゃくちゃ泥臭い方法。

Component#getLocationOnScreen()とかJComponent#getLocation()とか駆使してそのボタン(コンポーネント)の画面内座標を割り出して(移動していたり、サイズ変更されていたらどうしよう ?)、
その座標に向かってマウスクリックイベントを発生させる。

# Robotでできるのかな ? 試してないですけど。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2006-05-29 18:02
引用:

kazaaaさんの書き込み (2006-05-26 23:25) より:
Swingアプリケーションに対して外部プログラムから
ボタン押下させることは可能でしょうか?


対象となる「Swingアプリケーション」は、作り直せない(プログラムを改変できない)ものでしょうか?作り直せるものならば、ボタンに拘らなくてもいろいろ方法はあると思いますが、作り直せないものだったら、なまじ Swing なので外部からの制御は難しいですね。
AWT ならばそのボタン(Button クラス)は Windows から見てもウィンドウハンドルを持ったボタンであるので、制御は比較的容易です。一方 Swing のボタン(JButton)は、Windows から見たらただのハリボテですので、制御は難しいでしょう。
たとえば Spy++ などのツールでウィンドウの構造を調べられると分かると思います。

--
unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86}
Java僧
ぬし
会議室デビュー日: 2003/11/06
投稿数: 261
投稿日時: 2006-05-29 21:38
ちょうど、Windows用のUWSCというGUI自動操作ツールを調べていました。
このツールはJavaのGUIアプリの操作に "Java Access Bridge"を使っているようです。
http://jp.sun.com/company/aboutsun/access/accessbridge.html

私自身もつい先日に知ったばかりで使ったことがありません。
うまくいったら教えてくださいね。
kazaaa
会議室デビュー日: 2005/09/11
投稿数: 5
投稿日時: 2006-05-29 22:05
引用:

対象となる「Swingアプリケーション」は、作り直せない(プログラムを改変できない)ものでしょうか?


現在稼動しているアプリケーションなため何かしら仕組みを突っ込むことは
できません。。。

引用:

たとえば Spy++ などのツールでウィンドウの構造を調べられると分かると思います。


私もAWTなら実現できると考えていたのですが、SwingはWindowsから見れば唯の
空フレームでしかないため扱いに困ってしまいました。
そもそも内部コントロールにハンドル割り当てていませんし。

#びしばし様の仰る通り、Rational Robotでは実現されているのかな〜?
私も話に聞いたぐらいで使ったことないので何とも言えません。

#ちょっと面白い記事発見!
http://www.javaworld.com/javaworld/jw-11-2004/jw-1115-swing.html

Swingアプリをインプロセス(同JavaVM)で起動すればさすがに行けるみたい。
うまくインスタンス化できれば、現アプリに手を加えなくても実現可能かも。
普通Swingアプリってこうやってテストするのかな?
kazaaa
会議室デビュー日: 2005/09/11
投稿数: 5
投稿日時: 2006-05-29 22:09
引用:

Java僧さんの書き込み (2006-05-29 21:38) より:
ちょうど、Windows用のUWSCというGUI自動操作ツールを調べていました。
このツールはJavaのGUIアプリの操作に "Java Access Bridge"を使っているようです。
http://jp.sun.com/company/aboutsun/access/accessbridge.html

私自身もつい先日に知ったばかりで使ったことがありません。
うまくいったら教えてくださいね。



おお!ちょっとそそるタイトルですね!
早速ためしてみます。結果はここで報告させて頂きます!
1

スキルアップ/キャリアアップ(JOB@IT)