1

不注意なマシンで実行されるアプリケーションがあります。このアプリケーションで問題が発生すると、(メインウィンドウと同じタイトルを使用して)メッセージボックスがポップアップ表示されます。このメッセージボックスは、[OK]をクリックして閉じる必要があります。私がやろうとしているのは、アプリケーションがメッセージボックスをポップアップしたときを識別し、それに応じて応答することです。

AutoItにはWinWaitという関数があり、ウィンドウのコンテンツ(タイトルではなく)をチェックして、ウィンドウのハンドルを取得できることを知っています。C#で同様のことを行う方法はありますか?

私はスキャンをしましたが、これについて具体的に何も見つかりませんでした。すでにタイトルでウィンドウを取得できますが、メッセージボックスの内容を読んでメッセージボックスを識別する必要があります。

4

2 に答える 2

3

EnumWindows に pInvoke する必要があります。

http://www.pinvoke.net/default.aspx/user32.enumwindows

その後、ウィンドウを反復処理してタイトルを比較できます。

更新: コントロールもウィンドウであるため、それらを反復処理することもできます。したがって、探しているテキストを含む可能性のある特定のラベル コントロールを探すことができます。Spy++ を使用すると、探している特定のコントロール (ウィンドウ クラスなど) の特性を判断して、検索を絞り込むことができます。

于 2013-01-03T15:56:06.563 に答える
0

GUI ウィンドウにはテキストは含まれず、ピクセルが含まれます。これらのピクセルの一部は、人間の読者にはテキストとして表示されるように配置されている場合がありますが、ウィンドウがテキストを取得するためのインターフェイスを公開していない限り、洗練された OCR なしでは読み取ることができません。そうは言っても、ほとんどの一般的なコントロールはそのようなインターフェイスを公開しています。ウィンドウがラベル (静的)、編集ボックス (編集) などで構成されている場合、それらの子ウィンドウを列挙して、それらのテキストを読み取ることができます。たとえば、標準のメッセージ ボックスには、読み取り可能なラベル コントロールが含まれています。すべてのアプリが標準のコントロールやダイアログ ボックスを使用しているわけではないことに注意してください。

標準のメッセージ ボックスでラベル コントロールを読み取るためのソリューションを次に示します

于 2013-01-03T16:24:53.573 に答える