0

私は、他のアプリ (管理されていない) からデータをキャプチャする必要がある C# アプリケーションに取り組んでいます。

この別のアプリケーションには多くの SysListView32 コントロールがあり、特定の SysListView32 コントロールのデータを取得する必要がありますが、この特定のコントロールを取得するために使用できるのは、列のヘッダー (SysHeader32) テキストだけです。これらは SysListView32 ごとに異なります。コントロール。

すべての SysListView32 コントロールからデータ (行と列のすべてのテキスト) をキャプチャしましたが、ヘッダー列のテキストをキャプチャできません。

誰でも私を助けることができますか?

私の悪い英語に感謝し、申し訳ありません。

4

1 に答える 1

2

LVM_GETCOLUMNコントロールにメッセージを送信する必要があります。問題は、メッセージが、構造体へのポインターとして渡される構造体の内容を埋めることです。ただし、そのポインターは、リスト ビューを所有するプロセスで割り当てられたメモリを参照する必要があります。あなたのシナリオでは、リスト ビューは別のプロセスによって所有されています。

VirtualAllocを使用して他のプロセスにメモリを割り当てることで、これを回避できます。次に、そのメモリを で初期化できますWriteProcessMemory。次に、 を使用して内容を読む前にメッセージを送信しますReadProcessMemory。最後に、で割り当てを解除しVirtualFreeます。

これを正しく行うには非常に手間がかかります。ターゲット プロセスのビット数が異なる場合は、さらに複雑になります。

質問に対するあなたのコメントを見て、あなたがすでにこの手法に精通していることは明らかです。

私の意見では、自動化 API を使用した方がはるかに簡単に情報が得られると思います。

于 2013-07-26T15:12:20.657 に答える