7

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

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

  1. PowerBuilder アプリケーションのビジュアル オブジェクトのツリーをトラバースできる API (できれば Java または C/C++) はありますか? PowerBuilder Native Interface システムについて少し調べましたが、これは PowerBuilder スクリプト言語から呼び出すことができる C/C++ で PowerBuilder 拡張機能を記述することを意図しているようですね。

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

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

誰かがこれを経験したことがありますか、または誰かがすでにこれをやろうとしたかどうかに光を当てることができますか?

よろしくお願いします、

  • フレリッヒ
4

2 に答える 2

6

まず、簡単な答えです。あなたがやろうとしていることは、ある意味で行われたと思います。イネーブルのレックスは、あなたが求めていると思うことを実行しますが、IIRCが開発者と話し合うことは、アプリケーションに組み込まれているコードフックに依存します。

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

あなたが質問しているようなAPIについて聞いたことがあると思いますが、自動テストソフトウェアツールメーカーがそれを手に入れていることは他に聞いたことがありませんこれが真実である場合(そしてこの情報の品質が「廊下で聞いた」という線に沿っている場合)、これを出させる際にアプリケーションのセキュリティ問題があるのではないかと思います。(あなたが私のアプリケーションに感染したり、私の秘密を調べたりしたくないことはわかっています。にやにや笑い

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

私はその考えに感心します。もっと良いニュースがあればいいのにと思います(おそらくレックスが自分でやるという頭痛の種なしにあなたの問題を解決するかもしれません)。今、私はエランがリリースするかもしれないものをさらに楽しみにしています!ニヤニヤ

幸運を、

テリー。

于 2009-06-18T19:48:57.830 に答える
3

私はそのようなツールを作成したばかりですが、少しだましました。実際、PBニュースグループで自分自身と同じ質問をしようとしていました。私のソリューションは2つの部分で構成されています。

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

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

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

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

私が言わなければならないのは、あなたの質問は驚くべきタイミングでやってくるということです。私のこの最近の質問を参照してください。私が作成したツールに興味があれば、コメントをください。

于 2009-06-18T10:27:45.970 に答える