4

私はC# でユニバーサル テキスト自動補完アプリケーションを実行しています。そのため、現在アクティブなウィンドウ (メモ帳、MS Word など) でキャレットの位置を取得する必要があります。キャレットの X、Y 座標を取得するにはどうすればよいですか? ユーザーが入力している間、カーソル (キャレット) の下に提案を表示する必要があります。

私のプログラムはバックグラウンドで実行されています。現在アクティブなウィンドウでキャレットの存在を検出し、キャレットのリアルタイムの位置を取得する必要があります。ユーザーがテキストを入力するたびに、場所の値を更新する必要があります。

これらすべてを行う方法がわかりません。これはすべてC#を使用して可能ですか? または、プログラミング言語を変更する必要がありますか?

4

1 に答える 1

1

言語の選択は、この問題にはほとんど関係ありません。文字入力自体が難しい。

アプリケーションは多くの場合、カスタム コントロールまたは大幅にカスタマイズされたコントロールを使用してテキストを編集するため、問題を解決するのは困難です。メモ帳は標準の編集コントロールを使用するため、EM_GETSEL メッセージを使用してキャレット位置を文字単位で取得し、EM_POSFROMCHAR メッセージを使用してそれを画面上の位置に変換できます。標準のリッチ エディット コントロールにも同様のメッセージがあります。ただし、Microsoft Word では、おそらく COM を使用して呼び出し、キャレットの位置を確認する必要があります。他のアプリケーションには他の API があり、それらを調査、リバース エンジニアリング、サポート、およびテストする必要があります。これは始まりに過ぎません — キャレットの周りのテキストを取得して変更したり、UI を表示してユーザーに選択肢を提供したりしたいと思うでしょう。これは主要な PITA になるので、IME API を調べて、適切なものがあるかどうかを確認します。東アジアの入力モードは、それ自体が一種の自動補完機能であるため、あるはずです。IME の利点は、ターゲット コントロールに依存しないことです。

于 2013-03-10T10:50:34.947 に答える