0

こんにちは、かなり具体的な質問があります。これが標準的なスタック オーバーフローの質問でない場合は、申し訳ありませんが、別の exe のすべてのコントロール名を取得できるかどうかを確認する必要があります。

私はac#アプリケーションを持っていて、自分のコンピューターで実行されている別のスタンドアロンアプリケーションのすべてのコントロール名を取得したいのですが、b.exeと言うので、b.exeにテキストボックスとボタンがある場合、c#にテキストボックスとボタンの名前が必要ですexeと、b.exeのクリックイベントのリスナーが必要です

今まで私が研究したことは特別なことではありません.実際には完全なコードスナップは必要ありません.ガイドラインが欲しいだけです.ピンボークでそれを行うことができますか?またはwinapi?pinvoke と winapi とは何かを説明してください。また、アプリケーションのフックによって可能ですか? もう一度ガイドラインに従う方法が必要なので、これに関して助けてください。pinvoke または winapi を介してアクティブなウィンドウ名を取得できることはわかっていますが、私の要件は少し高くなります。

4

1 に答える 1

2

1. コントロール名へのアクセス:

残念ながら、私は .NET (C#) を使用していませんが、Visual C++ ではこれは不可能です。

その理由は次のとおりです。コントロールは実行可能ファイルに名前を持たなくなりましたが、名前は単純に数字に変換されます。

例 "myTextControl" は、実行可能ファイルでは 1234 になります。コントロールの(元の)名前に関する情報は、コンパイル中に完全に失われます。

2. 他の実行可能ファイルのコントロールへのアクセス:

.NET (C#) では、ネイティブ プログラミング言語 (Windows API に直接アクセス) ほど簡単ではありませんが、番号 (1234 など) を知っている限り、他の実行可能ファイルのコントロールにアクセスすることは可能です。

したがって、コントロールを含むダイアログ ウィンドウのウィンドウ ハンドルを見つける必要があります。その後、コントロールにメッセージを送信できます。残念ながら、ポインターを含む多くのメッセージには、非常にトリッキーなハックが必要になります。ポインターのないメッセージはうまく機能します。

3. 他の実行可能ファイルでコントロールのリスナーを作成する:

別の EXE 内のコントロールにリスナー (クリック リスナーなど) を作成することは可能ですが、非常に注意が必要です。これには、Windows API 関数 "SetWindowsHookEx "。

これを行う .NET API (C# に必要) が既に存在するとは思いません。これには使用例がほとんどないためです。

于 2013-08-22T06:49:44.103 に答える