Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

Javaアプリケーションのプロセスクラス名について

複数のJavaアプリケーション間で、プロセス間通信を行おうとしています。

本アプリケーションは、Windows上でのみ動くので、Win32APIのFindWindow関数を使い、ハンドルIDを取得し、取得したハンドルIDのプロセスとプロセス間通信を行うプログラムを作りました。
(Win32APIのFindWindow関数は、JNIを使い、C言語で呼び出しています。)

Java5で動かしていた時は、問題なく動作したのですが、Java6で同じプログラムを実行すると、FindWindow関数でハンドルIDが取得できませんでした。

原因を調べた所、Java5でJavaアプリケーションを実行した時と、Java6でJavaアプリケーションを実行した時で、FindWindow関数の第一引数に指定するプロセスのクラス名が変わっていたため、FindWindow関数でハンドルIDを取得できていませんでした。

具体的には、下記のようなソースを実行した場合、Java5では、プロセスクラス名は、Javaプログラムのクラス名"jp.test.FrameTest"になりますが、
Java6では、"SunAwtFrame"という名前になるようです。

そこで質問ですが、Javaアプリケーションを実行した時のプロセスクラス名を変更することってできるのでしょうか?
もしできるのなら、やり方をご教授ください。


----------以下、ソース----------
package jp.test;

import java.awt.*;
import javax.swing.*;

public class FrameTest extends JFrame{
 public FrameTest() throws HeadlessException {
  super.setTitle("TitleTest");
  super.setSize(new Dimension(200,200));
 }

 public static void main(String[] args) {
  FrameTest frame = new FrameTest();
  frame.setVisible(true);
 }
}
----------ソースここまで----------

【環境】
 Java5:jre1.5.0_15
  Java6:jre1.6.0_05
  OS:Windows Vista Home Premium SP1

2

回答

10844

閲覧

2件の回答

評価

0

Java5と6で確認してみました、いやー本当ですね。
Javaでは普通SendMessageとかでプロセス間通信をしないので、気にせず変更したのかもしれませんね。

で、変更になった原因はここに書いてあります。
http://forums.java.net/jive/thread.jspa?messageID=155539
以前のバグ修正のためにJRE1.6からは単純に"SunAwtFrame"を設定するようになったようです。
1.5と1.6のその部分のソースもあるので確認してみてください。

>Javaアプリケーションを実行した時のプロセスクラス名を変更することってできるのでしょうか?

この状況を見ると無理のようですね。
クラス名をプロパティファイルとかで外だしにするとか。
キャプションを独自な物にしてEnumWindowsで探すとかでしょうかね。

評価

0

http://f-app.com/dao/?inv=NDAxODA1OTkwOA==  
ドラゴンアッタクオンライン 
無料でかなり楽しいアプリだよドコモでもauでもソフバンでも出来るから試しにダウンロードしてみてください!!

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。