2

現在アクティブなウィンドウで、カーソルの下にある単語を取得するにはどうすればよいですか? 私の考えは、ハンドルを使用GetCursorPos()WindowFromPoint()て取得し、何かを行うことでしたが、どのように?

カーソルの下のテキストを読み取り、その意味を説明する辞書アプリを想像してみてください。

編集

テキスト描画のAPIフックを備えたstardictのdllを使用することになります。

4

2 に答える 2

5

これに必要な API を知っている必要があります。それは明らかではありません。MSAA、 Microsoft Active Accessibilityを探している

つまり、MSAA クライアントを作成します。呼び出すと、ポインターAccessibleObjectFromPointが取得されます。IAccessibleこのポインターは、指定されたポイントでオブジェクトのプロパティへのアクセスを提供します。

于 2012-09-21T07:52:53.337 に答える
2

あなたが求めていることは、実装するのが簡単ではありません。

カーソルの下にあるウィンドウを特定したら (ChildWindowFromPoint()ネストされたウィンドウをドリルダウンするために も使用する必要があることを忘れないでください)、 を使用GetClassName()して、それがどのタイプのウィンドウであるかを把握できます。

標準RICHEDITウィンドウの場合、 、、およびメッセージをMapWindowPoints()使用して、画面絶対カーソル座標をウィンドウ内のクライアント相対座標に変換し、カーソル座標で単語を検索、強調表示、およびコピーできます。EM_FINDWORDBREAKEM_EXSETSELEM_GETSELTEXT

標準EDITウィンドウの場合、座標を変換したら、EM_CHARFROMPOSメッセージを使用してカーソル座標に最も近い文字オフセットを特定しEM_GETTEXT、単一行ウィンドウの場合はメッセージを使用し、複数行ウィンドウの場合はEM_LINEFROMCHARおよびEM_GETLINEメッセージを使用できます (使用スタイルGetWindowLong(GWL_STYLE)をテストするためES_MULTILINE)、ウィンドウのテキストを取得するには、文字オフセットを囲むテキストを手動で解析する必要があります。

他のタイプのウィンドウ、特にカスタム コントロールの場合、ウィンドウのテキストにアクセスできる場合でも、さらに多くの作業を行う必要があります。WM_GETTEXTメッセージやに応答するウィンドウもあれば、応答しないウィンドウもありGetWidnowText()ます。

于 2012-09-21T02:44:44.537 に答える