質問

PowerBuilder ベースのアプリケーションの状態を検査できるツールを作成しようとしています。私が考えているのは、PowerBuilder ベースの GUI のオブジェクト ツリー (およびオブジェクトのプロパティ) を検査できる Spy++ (または、.NET アプリケーション用に存在する「Snoop」の方が便利です) のようなものです。

.NET アプリケーションだけでなく、通常の (MFC ベースの) アプリケーションに対しても同じことをすでに行いましたが、残念なことに、PowerBuilder でアプリケーションを自分で開発したことがないため、この時点では一般に 2 つの問題について考えています。

  1. PowerBuilderアプリケーションの視覚オブジェクトのツリーをトラバースできるAPI(できれば、JavaまたはC/C ++)はありますか?PowerBuilder ネイティブ インターフェイス システムについて少し読んだのですが、これは C/C++ で PowerBuilder 拡張機能を記述し、PowerBuilder スクリプト言語から呼び出すことを目的としているようです。

  2. 利用可能な API がある場合、PowerBuilder アプリケーションは、PowerBuilder アプリケーションのプロセス内にいなくても PowerBuilder オブジェクト階層の状態を検査できる、ある種の IPC 対応 API を公開している可能性もあります。おそらく、利用可能な自動化インターフェイス、または COM ベースのもの、あるいはその他のものがあるでしょうか?

現時点での私の印象では、おそらく PowerBuilder アプリケーションのプロセスに DLL を挿入し、実行中の PowerBuilder VM にアクセスして、オブジェクト ツリーをクエリできるようにする必要があるのではないかと思います。ある種の IPC メカニズムにより、この情報を PowerBuilder アプリケーションのプロセスから転送できるようになります。

誰かこれに関する経験がある人、または誰かがすでにこれを試みたかどうかを明らかにできる人はいますか?

よろしくお願いします、

  • フレリヒ
役に立ちましたか?

解決

最初に、簡単な答え:あなたがやろうとしていることはやったと思います。 有効化からのレックスは、あなたが望んでいると思うことをしますが、 IIRCは開発者と話をすることから、アプリケーションに組み込まれたコードフックに依存します。

これは、アプリケーションから完全に外部でやろうとしていると思うことを、あなたができるとは思わないという提案につながります。 WinAPIを使用してウィンドウハンドルを取得し、基本的な操作を行うことができますが、必要なだけではありません。 WinAPIを使用してデータウィンドウに関する情報を取得しますか?忘れてください。

私は信じているあなたが質問しているようなAPIを聞いたことがありますが、自動テストソフトウェアツールメーカーがそれを手に入れた他の誰も聞いたことがありません。これが当てはまる場合(およびこの情報の品質が「廊下で聞いた」という線に沿っている場合)、これを外に出す際にアプリケーションセキュリティの問題がある可能性があります。 (私はあなたが私のアプリケーションに感染することを決して望んでいないことを知っていますか、または私の秘密を見つけ出します。笑顔

PowerBuilder VMメモリ空間へのフックがあっても、PowerScriptフレームワークのフックなしでメモリ内のオブジェクトのリストを取得できることを知りません(たとえば、オブジェクトハンドルを使用してすべてのオープンおよびコンストラクターにリストを設定します)。ウィンドウハンドルを取得したら、そのコントロール配列(およびそのサブクラスコントロール配列)を簡単に走査して、ウィンドウ上のオブジェクトのリストを取得できますが、NVOインスタンス変数へのハンドルなどは問題になります。

私はそのアイデアを称賛します。もっと良いニュースがあればいいのに(多分レックスが自分でやるという頭痛なしであなたの問題を解決するかもしれない以外に)。今、私はエランがリリースするかもしれないものをさらに楽しみにしています! 笑顔

幸運を祈ります

テリー。

他のヒント

こんなツールを作ったのですが、ちょっとズルしてしまいました。実は私自身も PB ニュースグループで同じ質問をしようとしていました。私のソリューションは 2 つの部分で構成されています。

スパイのような道具 - Spy++ のようなスタンドアロン アプリ、つまりWindows API 関数 (ただし PB で記述されています) を使用して、ターゲットをコントロール上にドラッグできます。

ターゲット アプリケーションの内部インフラストラクチャ - すべてのアプリケーションのウィンドウの祖先に位置します。特定の (Windows) ハンドルが与えられると、Control[] 配列を調べて、指定されたハンドルと一致するハンドルを持つコントロールを探します。必要に応じて、タブなどのコントロール コンテナーにも再帰的に入ります。

ユーザーがコントロールを選択すると、スパイ ツールはまず Windows API を使用してコントロールを含むウィンドウを探します。ツールが見つかると、そのウィンドウにカスタム メッセージが送信され、アプリのインフラストラクチャによって処理されます。その後、コントロールは PB アプリ内に配置され、その詳細が最終的にスパイ ツールに送り返され、ユーザーに表示されます。

それができると思われるツール (Visual Expert、QTP) を見たことがあるので、インフラストラクチャ部分は外部のものに置き換えることができるのではないかと思います。ただし、さらに調査する時間がありませんでしたが、このソリューションは比較的簡単に開発できました。

あなたの質問は驚くべきタイミングで出てきたと言わざるを得ません。見る 最近の私の質問. 。私が作成したツールに興味がある場合は、コメントを送ってください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top