0

基本的なサード パーティの WinForms アプリケーションを自動化するための小さなツールを作成するよう依頼されました。

これまでのところ、私は多くのハードルを克服することができましたが、これはそれらすべての中で最もイライラするものの 1 つです (そして、LVM_GETITEMTEXT が 64 ビット ポインターを含む LVITEM 構造体を返していることを確認するためだけに 8 時間を調査に費やしたことは、非常にイライラさせられました) -サードパーティアプリケーションの StatusStrip で ToolStrupStatusLabel への参照を取得する方法がまったく見つからないようです。

アプリケーションが割り当てられたタスクを終了したことを示す唯一の兆候は、StatusStrip が更新されて終了したことを示すときです。あるジョブがいつ終了して別のジョブに進むかがわからない場合、その操作を確実に自動化することはできません。

アプリケーションに SendMessage() できるメッセージはありますか? 呼び出すことができる関数はありますか? このラベルのテキストを見つけて、アプリケーションのステータスを把握するのに役立つものはありますか?

自動化ツールは、さまざまな Windows 機能の pInvoke を使用して C#/Winforms でプログラムされています。また、LVITEM 構造体からデータを取得するのを支援するために C++ で独自の DLL を作成したので、C++ の回避策も可能です。

4

1 に答える 1

2

これは機能しません。ToolStripItemから派生したクラスは特別であり、Controlから派生したものではありません。彼らは独自のウィンドウハンドルを持っていません、彼らは彼ら自身を描くために彼らのホストのウィンドウを使用します。ホストがコントロールである場合(この場合はToolStripやStatusStripなど)。

これにより、ウィンドウハンドルを必要とする従来のUI自動化ツールでは使用できなくなります。それらを指揮する唯一の方法は、リフレクションを使用してToolStripItem参照を取得するDLLを挿入することです。これは存在し、ManagedSpy++ツールはこの手法を使用します。ソースコードが提供されているので、独自のソースコードをまとめることができます。手間のかかる作業を行うManagedSpyLibを活用することをお勧めします。

于 2012-08-12T14:08:15.960 に答える