現在アクティブなウィンドウで、カーソルの下にある単語を取得するにはどうすればよいですか? 私の考えは、ハンドルを使用GetCursorPos()
しWindowFromPoint()
て取得し、何かを行うことでしたが、どのように?
カーソルの下のテキストを読み取り、その意味を説明する辞書アプリを想像してみてください。
編集
テキスト描画のAPIフックを備えたstardictのdllを使用することになります。
これに必要な API を知っている必要があります。それは明らかではありません。MSAA、 Microsoft Active Accessibilityを探している
つまり、MSAA クライアントを作成します。呼び出すと、ポインターAccessibleObjectFromPoint
が取得されます。IAccessible
このポインターは、指定されたポイントでオブジェクトのプロパティへのアクセスを提供します。
あなたが求めていることは、実装するのが簡単ではありません。
カーソルの下にあるウィンドウを特定したら (ChildWindowFromPoint()
ネストされたウィンドウをドリルダウンするために も使用する必要があることを忘れないでください)、 を使用GetClassName()
して、それがどのタイプのウィンドウであるかを把握できます。
標準RICHEDIT
ウィンドウの場合、 、、およびメッセージをMapWindowPoints()
使用して、画面絶対カーソル座標をウィンドウ内のクライアント相対座標に変換し、カーソル座標で単語を検索、強調表示、およびコピーできます。EM_FINDWORDBREAK
EM_EXSETSEL
EM_GETSELTEXT
標準EDIT
ウィンドウの場合、座標を変換したら、EM_CHARFROMPOS
メッセージを使用してカーソル座標に最も近い文字オフセットを特定しEM_GETTEXT
、単一行ウィンドウの場合はメッセージを使用し、複数行ウィンドウの場合はEM_LINEFROMCHAR
およびEM_GETLINE
メッセージを使用できます (使用スタイルGetWindowLong(GWL_STYLE)
をテストするためES_MULTILINE
)、ウィンドウのテキストを取得するには、文字オフセットを囲むテキストを手動で解析する必要があります。
他のタイプのウィンドウ、特にカスタム コントロールの場合、ウィンドウのテキストにアクセスできる場合でも、さらに多くの作業を行う必要があります。WM_GETTEXT
メッセージやに応答するウィンドウもあれば、応答しないウィンドウもありGetWidnowText()
ます。