2016-03-24 16 views
0

を使用して他のアプリケーションのリストボックスのハンドルを検索します。しかし、私はリストボックスのコントロールへのハンドルを見つけることはできません。私はSendMessage関数</p> <p>I'vが正常に正しいメインウィンドウを発見し、コマンドを送信を使用して、別のアプリケーションのリストボックスで選択するようにしようとしている私の現在のWinFormsプロジェクトでWinformsの

FindWindowEx関数を使用するか、Winspy ++を使用すると、複数のリストボックスといくつかのボタンを保持するウィンドウの一部のハンドルしか取得できません。

正しいリストボックスのハンドルを取得すると、SendMessageとLB_SELITEMRANGEEXを使用してその中の特定のアイテムを選択できますか?

ありがとうございます!

答えて

0

他のアプリケーションが.NETで記述されている場合は、実際のWindowsコントロールとして登録されるのではなく、一部の.NET System.Windows.Formsがグラフィックで表示されるためです。これはもともと、.NETフォームとWindowsの間に相違があったためです.Netは、当時Windowsのバージョンではサポートされていなかったコントロール機能を提供しようとしていました。今、この相違は、2つのグループが完全に相容れないために和解しようとすると費用がかかりませんが、それが真であるかどうかはまだ分かりません。

LB_SELITEMRANGEEXは、メッセージを送信する方法を理解できたとしても、カスタム.NETコントロールでは理解できないことに注意してください。

私が見ることができるWindowsコンテナコントロール(.NET Panelオブジェクトにラップされたグループ化コントロール)によって子コントロールがどのように所有されているかを調べることをお勧めします。異なっていることを除いて明らかな理由がないためにコントロール階層を難読化する。特に、リストボックスの周りをクリックすると、通常のWindowsコントロールメッセージが渡されているかどうかを判断するために、イベントメッセージを監視します。

これらがWindowsコントロールとして登録されていないカスタム.NETコントロールである場合、オプションは制限されます。 .NETは、組み込みのWindowsメッセージシステムではなく、イベントを管理するイベントコールバックへのポインタにほとんど依存しています。実行中のWindowsアプリケーションごとのCLRインスタンスは別です。 Formオブジェクトへのポインタを取得できても、マネージヒープや仮想メモリ空​​間を共有しないため、アプリケーション全体でそのオブジェクトを使用することはできません。

アプリケーションの開発を支配している場合は、外部から見えるメッセージを追加してこれを助けることができますが、そうした場合は、このようなメッセージを送信する必要はないと思います。これらのコントロールのほとんどが元々直接上に構築されていたため、特定のコントロールにWindowsメッセージングシステムを通過するメッセージングインターフェイスがある場合、送信するメッセージと送信場所を把握できますWindowsのコントロールの、その後、後で発散。

関連する問題

 関連する問題